线程池和多线程同步的一些问题

关于线程池和多线程同步的一点问题记录

1.线程池

newScheduledThreadPool可以设定预定工作时间,给定延迟的线程池

newFixedThreadPool每提交一个任务就创建一个新的工作线程,如果工作线程数量达到设定的最大值就把任务存入到池队列中

newCachedThreadPool创建一个可以根据需要创建新线程的线程池,可重用时就重用,没线程可用就新建,移除长时间不用的线程

newSingleThreadExecutor创建一个只有一个大小的线程池

这里的所有线程池都有一个核心线程数(single只有一个核心线程),一般来说核心线程数以内的线程不会在没有任务的时候被释放,但是这个也可以配置为容许核心线程被释放

2.volatile变量

volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值volatile仍然不能保证原子性,因此仍然有可能导致数据不同步的问题。使用场景为多个线程共享同一个数据,static和volatile的区别在于static修改之后不能保证立即回写到主内存而volatile会在修改完之后立即回写主内存。与synchronized的区别在于后者能保证原子性。保证原子性可以使用原子更新字段类 Atomic类三剑客。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,540评论 11 349
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,196评论 0 11
  • 夕阳的背后 月牙悄悄爬上了夜空 回家的归途 有谁在默默等候 想给你快乐 却不懂怎么温柔 只愿陪伴在你的左右 哪怕一...
    丶碎梦阅读 2,166评论 0 0
  • 今天,吃了一发朋友的安利《天山童姥》 剧情走飞,搞笑中二,没关系,看几大美人颜值就可以舔屏完一个半小时。 来来,我...
    披着马甲写日记阅读 3,427评论 0 0
  • 今天一早先走路,后坐环保车,缆车到达了鸡足山的金顶,跟着四川甘孜来的上师祈福,转经,下山后还一起听师兄们诵经,第一...
    卓彤的美好时光阅读 1,594评论 0 0

友情链接更多精彩内容