美文网首页
线程基础部分

线程基础部分

作者: writeanewworld | 来源:发表于2018-11-06 17:52 被阅读0次

    1.图示

    image.png

    2.基础知识题目
    (1)、什么是线程?
    线程是操作系统进行调度的最小单位,也是进程的实际运作单位。(再多处理器编程下,可以使用多线程处理密集型任务)

    (2)、线程? 进程?
    一个进程可以有多个线程。不同的进程使用不同的计算机内存空间,但是所有的进程共享相同的内存空间, 每个线程都有单独的栈内存来存储本地数据。

    (3)、java中咋创建一个线程?
    java.lang.Thread类的实例就是一个线程,但是需要通过java.lang.Runnable接口来执行。

    (4)、继承Thread类,与实现Runnable两种创建线程方式那种更好?
    提示:java不同与C++是不支持多重继承的,但是可以多
    重实现接口。

    (5)、Thread类中的start、run方法区别?
    java线程模型->start()是用来启动新创建的线程的,start在内部调用了run方法,但是直接调用run是在原来的线程(run用来重写)中调用,并不是在新建的线程中调用的

    (6)、java中Runnable与Callable有什么不同?
    Runnable是在JDK1.0出现的,而Callable是在JDK1.5添加的。主要区别就是Callable的call方法可以返回值和抛出异常,而Runnable的run方法则不可以。Callable可以返回装载有计算结果的Future对象。

    *(7)、CyclicBarrier与CountDownLatch?
    都可以用来让一组线程等待其他线程。CountdownLatch不能重新使用。

    *(8)、java内存模型?
    这个暂时讲不清,待补充...

    (9)、volatile变量?
    首先volatile只能声明在局部变量上。其次此变量会对所有的线程保持可见性(原子性,可见性,有序性),也就是当一个线程修改了这个变量的值,volatile保证了新的值能立即同步到主内存。还有一个是volatile禁止了指令重排序,通过设置内存屏障指令保证处理器不发生乱序执行的行为。

    (10)、指令重排序?
    通俗地讲就是 程序执行并不一定会按照代码顺序来执行

    (11)、竞态条件?
    竞态条件是并发的时候多个线程竞争一个资源就可能产生。线程的执行顺序可能跟时序不符,然后就可能会产生一些预期之外的bug.

    (12)、java中如何停止一个线程?
    可以使用volatile布尔变量退出

    (13)、一个线程运行时发生异常会怎样?
    ① 如果该异常被捕获或抛出,则程序继续运行。
    ② 如果异常没有被捕获该线程将会停止执行。
    Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler()来查询线程的UncaughtExceptionHandler,并将线程和异常作为参数传递给handler的uncaughtException()方法进行处理。

    (14)、如何在两个线程之间共享数据?
    共享对象 、使用阻塞队列这样并发的数据结构

    相关文章

      网友评论

          本文标题:线程基础部分

          本文链接:https://www.haomeiwen.com/subject/qqlxxqtx.html