龙空技术网

Java编程细节——多线程同步的理解

Android凯哥 259

前言:

而今小伙伴们对“java多线程的同步”可能比较讲究,看官们都想要学习一些“java多线程的同步”的相关内容。那么小编也在网上网罗了一些对于“java多线程的同步””的相关知识,希望姐妹们能喜欢,同学们快快来了解一下吧!

多线程同步是指多个线程访问锁定的代码段时,必须按照每个线程获取该代码段锁的顺序执行。

更多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 相关细节知识请《关注我》,欢迎评论欢迎转发

标签: #java多线程的同步