多线程
文章平均质量分 59
樱花树下的猫老师
好好工作,天天向上…
展开
-
线程的终止方式
比如对于一个线程a,当其他线程调用了a的interrupt方法,如果a中在执行wait、sleep等方法,会抛出InterruptedException异常,然后中断。反观stop则会直接中断。stop是强制中断,而interrupt不是直接中断,而是做一个中断标识,会做好相关收尾工作再中断。stop对于io流直接中断,没有正常close关流,会导致内存溢出。stop对于hashmap扩容直接中断,可能引起数据结构错误。原创 2023-03-27 01:58:36 · 58 阅读 · 0 评论 -
callable的get导致的线程阻塞与ExecutorCompletionService的执行顺序
下面代码的线程执行顺序,收到future的get方法的阻塞影响,即当future对应的callable内的任务尚未执行完毕,则整个流程都被get阻塞住,导致输出乱序。 public class TestDemo2 { public static void main(String[] args) throws Exception { Callable<Integer> cal1 = new Callable<Integer>() { @原创 2021-07-09 00:16:03 · 1054 阅读 · 0 评论 -
synchronized和volatile的区别
讨论两者前,先要了解JMM(java memory model)java内存模型:每个线程都会有自己的工作内存,所有线程的工作内存共同指向主内存。 如果一个变量,在多个线程的内存中,都存在副本,那么这个变量就是这些线程的共享变量。 如果一个线程对共享变量进行修改,能及时的被其他线程获取,则该共享变量为线程可见。 对A、B两个线程实现线程可见性,假如在A线程修改了数据,则需要及时把A线程的工作内存中修改的数据刷新到主线程,接着及时把主线程中的数据刷新到B线程的工作内存中。 有以上情况,是由于每个线程对共享变量原创 2020-12-11 20:03:54 · 158 阅读 · 0 评论