随笔分类 -  Java 多线程

摘要:题外话: interrupt()方法 并不能中断一个正常运行的线程!!! 输出: mark ...... i=999 此时的输出为 是否停止1?true是否停止2?falseend! interrupt虽然不能中断一个正常执行的线程,但是会将目标线程的中断状态置为true 而interrupted用 阅读全文
posted @ 2017-06-19 20:38 丨核桃牛奶 阅读(495) 评论(0) 推荐(0)
摘要:加锁机制既可以确保可见性又可以保证原子性,而volatile变量只能确保可见性。 当把变量声明为volatile时候 编译器与运行时都会注意到这个变量是共享的,不会将该变量上的操作与其他内存操作一起重排序。 volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatil 阅读全文
posted @ 2017-06-18 18:45 丨核桃牛奶 阅读(303) 评论(0) 推荐(0)
摘要:Thread.join() CountDownLatch.await() CyclicBarrier.await() 三者都是用来控制程序的“流动” 可以让程序“堵塞”在某几个点 以利用经由多线程操作后的某些最终结果 eg1: 此时输出为10 注意在run方法中的sleep操作,此时必须写到try/ 阅读全文
posted @ 2017-06-15 15:32 丨核桃牛奶 阅读(925) 评论(0) 推荐(0)
摘要:先行发生原则 程序顺序原则:一个线程内保证语义的串行性 volatile:volatile变量的写,先发生于读,这保证了volatile变量的可见性 锁规则:解锁必然发生在随后的加锁前 传递性:A优先于B B优先于C 则A优先于C 线程的start方法优先于它的每一个动作 线程的所有操作先于线程的终 阅读全文
posted @ 2017-06-14 11:37 丨核桃牛奶 阅读(950) 评论(0) 推荐(0)
摘要:tips: 1 当前ThreadLocal对象通过调用getMap(Thread.currentThread()) 2 当ThreadLocal外部强调用被回收时 ThreadLocalMap中的key变为null 3 当系统进行ThreadLocalMap清理时(新变量入表)会自动清理 key=n 阅读全文
posted @ 2017-06-14 11:01 丨核桃牛奶 阅读(133) 评论(0) 推荐(0)
摘要:聊聊并发:http://ifeve.com/java-concurrency-thread-directory/ 阻塞状态: sleep 可中断利用 interrupt方法 wait IO 不可中断 I:关闭底层资源 II:new I O 任务试图在某个对象上调用其同步控制方法,但是对象锁被另一个任 阅读全文
posted @ 2017-06-11 17:56 丨核桃牛奶 阅读(165) 评论(0) 推荐(0)
摘要:从性能上看 如果没有任务会阻塞 那么在单处理器的机器人使用并发就没有任何意义 (需要上下文切换 时间反而长) 进程是运行在他自己地址空间的自包容的程序 协作多线程与抢占式多线程 想要定义任务需要实现Runnable接口并编写run方法 将任务转变为工作任务的方法是将它交给一个Thread构造器 Th 阅读全文
posted @ 2016-08-02 09:30 丨核桃牛奶 阅读(133) 评论(0) 推荐(0)