多线程编程核心技术-学习整理

一:第一章我觉得只有这个值得记录一下:停止线程:

1.异常方式:

子线程实现方式

主进程实现方式

当出现异常之后不要在子线程中进行异常处理,要将异常抛给自己的父类,让父类决定是否处理该异常;
如果在子线程中处理,如图A处改成break,只是将for循环停止掉了,但是for循环之外的语句B还是会执行,没有真正的停止掉

2在沉睡中停止进程

父进程:1.start ;2.interupt(2000)3.interupt
子线程:直接sleep(300000)
结果:父进程interupt之后线程终止

相反的:
父进程:1.start 2.interupt
子线程:1.for(无关紧要);2.sleep
结果:同样可以抛出异常结束线程

结论:无论sleep在interupt之前或之后都是可以中断线程的

使用return和interupt同时解决线程停止

同理我的第一种处理异常的方式

将throw 改成return同样可以实现(不是break)

但是建议使用throw交由自己的父进程决定是否需要停止该线程

第二章:对象及变量的并发发文

私有变量永远不会造成线程安全问题

如果是这样子的,即便有在方法中加synnosized关键字,也不会顺序执行,应为生成两个对象出现两把锁

关于脏读:

image.png

简单来说在一个对象中加入了syn,调用这个方法表明我获取了这个对象锁,而不只是方法锁,但是其他方法可以调用没有被syn修饰的方法,所以为了禁止脏堵。类似get和set的情况我应该两个都加上syn,这样只有被syn修饰的你都得等我用完了才能访问

2.16锁重入

你可能感兴趣的:(多线程编程核心技术-学习整理)