Java每日5问(第30天)

1. Java 创建线程之后,直接调用 start()方法和 run()的区别?

启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由 JVM 调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

2. 线程 B 怎么知道线程 A 修改了变量?

volatile 修饰变量
synchronized 修饰修改变量的方法
wait/notify while 轮询

3. synchronized 和 Volatile、CAS 比较?

synchronized 是悲观锁,属于抢占式,会引起其他线程阻塞。volatile 提供多线程共享变量可见性和禁止指令重排序优化。CAS 是基于冲突检测的乐观锁(非阻塞)

4. 线程间通信,wait 和 notify 的理解和使用?

1 wait 和 notify 必须配合 synchronized 关键字使用。
2 wait 方法释放锁,notify 方法不释放锁。
3 还要注意一点 就是涉及到线程之间的通信,就肯定会用到 validate 修饰。

5. 定时线程的使用?

1、普通线程死循环2、使用定时器 timer
3、使用定时调度线程池 ScheduledExecutorService

猜你喜欢

转载自blog.csdn.net/qq_39899164/article/details/107306704
今日推荐