java高级编程java多线程学习笔记(Java编程细节多线程同步的理解)
java高级编程java多线程学习笔记(Java编程细节多线程同步的理解)volatile保证可见性。synchronized或者cas实现原子操作。开启线程的注意点:1)同一个Thread子类只能开启一个线程(Start一次),2)同一个Runnable实现类可以开启多个线程(Start多次),实现线程内部资源共享,3)线程是否为死循环,4)线程何时销毁何时销毁线程:保证线程执行完,然后自动销毁讲讲多线程里面的原子性和可见性
多线程同步是指多个线程访问锁定的代码段时,必须按照每个线程获取该代码段锁的顺序执行。
更多Java 相关细节知识请《关注我》,欢迎评论欢迎转发
轮询List的线程是怎么写的?直接开一个线程有什么需要注意的地方吗?什么时候对线程进行销毁?
-
轮询List:List为空时,通过wait将轮询线程阻塞;List不为空时,通过notify将轮询线程唤醒。
-
开启线程的注意点:1)同一个Thread子类只能开启一个线程(Start一次),2)同一个Runnable实现类可以开启多个线程(Start多次),实现线程内部资源共享,3)线程是否为死循环,4)线程何时销毁
-
何时销毁线程:保证线程执行完,然后自动销毁
讲讲多线程里面的原子性和可见性
-
synchronized或者cas实现原子操作。
-
volatile保证可见性。
volatile能保证有序性吗
-
只能保证一定程度上的有序性。对于被volatile修饰的变量A可以保证有序性,与变量A无关的代码无法保证
-
通过设置内存屏障(lock操作)保证变量A的有序性。加入volatile关键字时,会多出一个lock前缀指令,lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能:
1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;
更多Java 相关细节知识请《关注我》,欢迎评论欢迎转发