Java 回顾笔记_多线程_2

线程的状态:


线程创建的第二种方式:


将任务封装成对象:



方法二的好处(区别):


__


___

继承 Thread和实现 RuntimeThread 小区别

如果当你想实现4个线程同时对一个元素进行操作,就用Run

如果你想4个线程 四个元素就用Thread

因为当你使用继承Thread的 时候,你就创建了4个对象 开辟了四个空间;

而你去实现Run方法的时候,只用创建一个对象,和4个线程对象。他们公用一个对象的数据;

——)————

多线程的安全隐患:

只能catch不能throws的情况;

当你实现的接口没有声明异常,所以你实现了接口,也不能声明异常。只能catch;

安全问题:因为当你4个线程同时运行的时候,可能在最后判断的时候会出现,四个线程都已经进来,比如 if(num>0) 当num=1的时候,四个线程都已经完成了判断,准备进行其他处理,但是当第一个线程运行完时,num=0;到第二个线程继续运行的时候,num=-1。。所有会有安全隐患;

__

安全问题发生的原因:


——————————————

解决方法:同步代码块



注意我们传递了一个object的对象进来.

_____

同步的好处和坏处:


________

同步的前提:

如果只有一个线程,那么就不需要同步;


___

当你线程的run();内部调用其他的方法的时候,被调用的方法也变成了线程的代码,

所以 如果在被调用的方法中又安全隐患也需要解决。

————————

解决方法2:同步函数


——————

同步函数的锁:


同步函数用的锁死this;同步代码块用的是obj(就是传进同步代码的对象);

__

同步函数和同步代码块的区别:


同步函数可以看成同步代码块的简写,当你使用的是this作为对象的时候,

就可以使用同步函数。

————————

静态函数的同步函数锁:


当你的函数是静态函数的时候,我们同步函数 使用的class的字节码对象.

this.getclass()获取当前class的字节码对象。

应为当我们进内存的时候我们是先找到字节码对象。所以我们静态函数会去使用

这个字节码对象。

一个Class只有一个字节码对象,而获取字节码对象有两种方式


——————————

单例设计同步问题:


当我们使用懒汉式的时候,如果使用多线程会出现 安全问题。所以我们给他加上

同步,但是当我们使用同步函数来解决安全问题的时候,就会发现,当你S不等于

空的时候,他每一次运行还是要判断 锁。这样降低了我们开发效率。

所以我们使用同步代码块,但是这样还没解决,效率问题,所以我们在 锁前面在

加一个判断,这样就解决了判断问题。

但是我们可以发现 懒汉式还是相对麻烦。一般我们还是使用饿汉式。

————————

死锁:

死锁容易发生的情况:同步的嵌套。

死锁例子:



————————

注意事项:

我们要实现同步必须是每一个线程使用的都是同一个锁;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值