![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java-多线程
文章平均质量分 69
陈年小趴菜
这个作者很懒,什么都没留下…
展开
-
Java多线程之interrupt
/如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。调用static boolean interrupted()方法时,如果interrupted为true,会将interrupted设置为false。// 检查线程是否被中断,调用后会清除中断状态。// 检查线程是否被中断。interrupt()只是改变中断状态,不会中断一个正在运行着的线程。线程没有被阻塞,调用interrupt()方法将不起作用。原创 2023-11-09 15:04:04 · 12159 阅读 · 0 评论 -
Java多线程之volatile
此时,线程2抢到了CPU时间片,同时调用了getInstance方法,第一次校验就发现instance不为null,遂将其返回。但是由于另外一个线程在自己的工作内存中已经保留了一份该共享变量的副本,因此它无法感知该变量的值已经被修改。在多线程中,重排序后的代码则可能会出现问题。一个简单的计算机可以抽象为CPU、内存及I/O设备,CPU处理与运算数据,最后写入到内存中。如果线程1第一次调用单例方法,在该线程的时间片轮转结束后执行到了优化后的第二个指令,即instance被赋值,但是还未被分配初始化对象。原创 2023-07-19 15:16:38 · 11667 阅读 · 0 评论 -
Java多线程之synchronized
synchronized具有同步功能,是一种互斥锁,锁的是对象。如果既想保证共享变量的可见性和有序性,又想保证原子性,那么synchronized关键字是一个不错的选择。synchronized的缺点:1.synchronized底层是由jvm实现,因此不能手动控制锁的释放,不如lock锁灵活,synchronized修饰的方法一旦出现异常,jvm保证锁会被释放(lock锁需要在finally中释放)。2.synchronized是非公平锁,不保证公平性。原创 2023-07-20 12:11:11 · 6231 阅读 · 0 评论 -
Java多线程之线程状态
线程六大状态:New、Runnable(Ready、Running)、Waiting、TimedWaiting、Blocked、Terminated。原创 2023-07-18 20:31:03 · 6610 阅读 · 1 评论 -
Java多线程之sleep、yield、join
1.在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。使当前正在执行的线程以执行的毫秒数暂停,具体取决于系统定时器和调度程序的精度和准确性。暂停当前正在运行的线程(及放弃当前拥有的cpu资源),并执行其他线程。进程切换时,涉及到当前进程CPU环境的保存和新被调度运行进程的CPU环境的设置。线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其他资源。保证线程执行的顺序,底层是通过wait和notify实现的。原创 2023-07-18 19:59:23 · 12199 阅读 · 1 评论 -
Java多线程之并发特性
解决方式:单线程环境下我们可以认为整个步骤都是原子操作;多线程环境下想要保证原子性,需要通过锁(乐观锁CAS、悲观锁)、synchronized来确定。volatile是无法保证复合操作的原子性的。Java1.5之后提供了volatile更加轻量级的锁。重排序的意义:提高并行效率,编译器认为重排序后执行更优,指令级重排序并行效率更好。1.线程A把本地内存A中更新过的共享变量刷新到主内存中。2.线程B到主内存中读取线程A之前已更新过的共享变量。通过公式+压测+上线后数据观察得出最合适的工作线程数。原创 2023-07-17 22:12:47 · 11610 阅读 · 1 评论