10) Java中的volatile 变量是什么?-达内培训负责整理
volatile是一个特殊的修饰符,只有成员变量才能使用它.在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的.volatile变量可以保证下一个读取操作会在前一个写操作之后发生,就是上一题的volatile变量规则.查看更多volatile的相关内容.(#/2011/06/volatile-keyword-java-example-tutorial.html)
11) 什么是线程安全?Vector是一个线程安全类吗?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的.一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误.很显然你可以将集合类分成两组,线程安全和非线程安全的.Vector 是用同步方法来实现线程安全的, 而和它相似的ArrayList不是线程安全的.
12) Java中什么是竞态条件? 举个例子说明.
竞态条件会导致程序在并发情况下出现一些bugs.多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定的bugs.这种bugs很难发现而且会重复出现,因为线程间的随机竞争.一个例子就是无序处理,
13) Java中如何停止一个线程?
Java提供了很丰富的API但没有为停止线程提供API.JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程.当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程.
14) 一个线程运行时发生异常会怎样?
这是我在一次面试中遇到的一个很刁钻的Java面试题, 简单的说,如果异常没有被捕获该线程将会停止执行.Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口.当一个未捕获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler()来查询线程的UncaughtExceptionHandler并将线程和异常作为参数传递给handler的uncaughtException()方法进行处理.
15) 如何在两个线程间共享数据?
你可以通过共享对象来实现这个目的,或者是使用像阻塞队列这样并发的数据结构. 16) Java中notify 和 notifyAll有什么区别?
这又是一个刁钻的问题,因为多线程可以等待单监控锁,Java API 的设计人员提供了一些方法当等待条件改变的时候通知它们,但是这些方法没有完全实现.notify()方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地.而notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行.
以上就是达内培训给大家做的内容详解,更多关于IT知识的学习,请继续关注达内培训