多线程同步是指多个线程访问锁定的代码段时,必须按照每个线程获取该代码段锁的顺序执行。
更多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)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;
2)它会强制将对缓存的修改操作立即写入主存;
3)如果是写操作,它会导致其他CPU中对应的缓存行无效。
更多Java 相关细节知识请《关注我》,欢迎评论欢迎转发