3分钟带你沉迷于线程运动

1、线程安全问题出现的原因 -----

                        多个线程访问统一资源,有可能出现线程安全问题

                         解决方法-> Ⅰ使用synchronized锁{}Ⅱ使用代码块儿解决线程安全问题,不能将统一资源的变量放置外面,任何对象都可以当锁:  每一个对象身体里面都有一个开关

2、synchronized那些事

 2.1 ynchronized  修饰一个方法,表示该方法是线程安全的,即该方法在同一时间点只有一个线程在使用,直到该方法执行完毕为止

2.2synchronized  修饰一个非静态方法:  该锁指的是这个类的实例化对象  this 

2.3synchronized  修饰一个静态方法:  该锁指的是这个类的序列化文件   WindowThread02.class

  线程安全问题: 使用哪个方案比较好?  使用代码块儿
     *     1) 使用代码块儿可以指定锁对象
     *     2) 使用代码块儿更灵活      代码一旦加了锁,更安全,但是效率极低,我们可以灵活地将出现线程安全问题的代码块儿加锁

4      1、出现安全问题原因?
     *  2、咋解决?  
     *  3、颗粒度 越小越好   synchronized(""){
     *        
     *     }
     *  4、静态方法和非静态方法,锁对象分别指的是?    类的字节码文件        非静态: 当前的this对象
     *  5、sleep()  不会释放锁资源
死锁:
     *   多个线程访问多个公共资源,有可能出现死锁
     *   死锁现象没有技术可以解决,只有写代码规避

6  // 线程的第二种写法
/**
 * 
 * 1、实现Runnable 接口,重写run方法
 * 2、实例化实现了Runnable 接口的类,当做参数传递给Thread构造方法
 * 3、通过thread的实例化对象启动线程
 * 
 * 
 * 
 * 两种方案: 哪种好?  第二种好
 *    1、java是单继承的。   如果你编写了一个线程的子类,就无法继承其他类
 *    2、java讲究   什么人干什么事儿   Thread已经是一个成熟的类,它主要干启动线程、线程等多个操作即可,就没必要干业务逻辑的事儿(代码可以对多个线程共享)
 *        所以如果要写逻辑,请交给其他类来做。   狗   猫

/**
 * 
 * 如何停止一个线程?
 *   建议方案: 使用标志
 *   
 *   1、stop: 暴力执法,直接停止正在运行的线程,而不管你的业务逻辑现在干什么?
 *   2、使用标志停止线程,业务逻辑非常完整,非常符合真实的情景
 */

8  

 *    wait() 等待   notify() 唤醒
 *    1、这两个方法不是Thread里面独有的,而是Object类的方法
 *    2、wait() 和 notify() 必须在同步代码块儿或者同步方法中才能调用
 *    3、wait()  将当前线程进入等待状态      notify()  唤醒目前线程池中的一个等待的线程    notifyAll()  唤醒全部
 *    4、wait() 和 notify() 调用者是锁对象
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值