1.图示
image.png2.基础知识题目
(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)、如何在两个线程之间共享数据?
共享对象 、使用阻塞队列这样并发的数据结构
网友评论