线程的基本语法

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

解决线程安全问题

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

语法基本

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完了)进入的是就绪状态

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 10,541评论 0 23
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 5,636评论 0 12
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 7,400评论 0 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,849评论 1 32
  • 不活在别人的眼里, 也不活在自己的情绪里, 不为过去的荣耀沾沾自喜, 也不为曾经的坎坷自怨自艾, 只是安静的活在当...
    君子温和阅读 936评论 0 2