线程的基本语法

线程同步[解决线程安全问题]

解决线程安全问题

线程同步方式一:同步代码

语法基本

synchronized (同步监听对象) {

可能引发线程安全问题的代码

}

上面的结构相当于把{ }中的代码捆绑成一个整体,线程只能够一个一个的进来,执行完一个,下一个才能进来

语法特点

1. 上面的同步监听对象可以是任意的对象;

2. 保证所有的线程共享一个同步监听对象的;也就是保证被同步监听对象是被所有线程共享的。

3. 很多时候可以写this,但是请先参照②,

4. 常用的方式:使用类的字节码对象XXX.class

线程同步方式二:同步方法

1、就是在需要被同步的方法上面加关键字synchronized

2、加的位置:在返回值类型的前面

3、不需要也不能够显示的写同步监听对象

4、如果是一个非static的方法,那么同步监听对象就是this;

5、如果是static修饰的方法,那么同步监听对象就是当前方法所在的类的字节码对象

线程同步方式三:锁机制

1、学习方式(查找API文档方式)锁--Lock(API)接口  ---XXX实现类  

2、结果:没有同步到

3、原因:lock是一个实例变量,因此创建了3个TicketThread对象就有3个lock对象,没有同步到

4、解决办法:static lock  ; 或者使用实现的方式


线程通信与等待唤醒

线程之间的交流

如何实现

线程的生命周期

1、简单来说就是从什么时候开始,到什么时候结束

2、线程的声明周期分几个阶段:

① 创建  ;  例如  Thread  t = new Thread();

② 就绪  ;  调用了start方法  t.start()  ---> 告诉CPU我准备好了

③ 运行  ;  获得CPU的资源,开始执行线程体中的代码

④ 死亡  ;  有多种情况导致死亡,

     (1) 例如线程体执行完毕(自然老死);

      (2) 非自然死亡(异常没有处理好);

      (3) 对象失去引用

      (4) 对象被垃圾回收机制销毁

3、注意点:

① 休眠等操作可能导致正在运行的线程阻塞],阻塞完了(sleep完了)进入的是就绪状态

相互一一直等待,出现死锁!

② 一个线程死了就死了,不能够死而复生

你可能感兴趣的:(线程的基本语法)