快捷搜索:  汽车  科技

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)线程何时销毁

  • 何时销毁线程:保证线程执行完,然后自动销毁

java高级编程java多线程学习笔记(Java编程细节多线程同步的理解)(1)

讲讲多线程里面的原子性和可见性

  • synchronized或者cas实现原子操作。

  • volatile保证可见性。

volatile能保证有序性吗

  • 只能保证一定程度上的有序性。对于被volatile修饰的变量A可以保证有序性,与变量A无关的代码无法保证

  • 通过设置内存屏障(lock操作)保证变量A的有序性。加入volatile关键字时,会多出一个lock前缀指令,lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能:

1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;

更多Java 相关细节知识请《关注我》,欢迎评论欢迎转发

猜您喜欢: