20180831_老师笔记_线程2

版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 https://blog.csdn.net/qian_qian_123/article/details/82284188

1.线程的常用方法:

1.获取当前正在执行的线程对象, static方法

Thread

currentThread()

2. 返回该线程的名称

String

getName()
          。

3. 让线程睡眠多久, 释放CPU资源, 抛出InterruptedException, 被打断异常

static void

sleep(long millis)   以毫秒作为单位

4.判断线程是否处于活动状态

 boolean

isAlive()

5.线程优先级

  优先级:可以给线程设置优先级,范围是1-10,10优先级最高

setPriority(数字):给线程设置优先级,这里优先级高,并不代表一定先执行,只是增加了抢占到资源的机会

getPriority():获取线程的优先级,

Thread提供了三个优先级常量:

​ Thread.MAX_PRIORITY=10

​ NORM_PRIORITY = 5

​ MIN_PRIORITY = 1

​ Main方法的优先级,是5

6.yeild()  礼让, A线程正在执行, 调用yeild(), 退出CPU资源,  然后与其他线程竞争CPU资源

 

7.join()  线程A中, 启动线程B, 线程B调用join(), 让线程A等线程B执行完,线程A才执行

 

 

2.在外部线程终止

  第一种方式:

     设置一个boolean的属性,  提供公开的set属性名(), 在线程外,调用set属性方法,设置为false, 终止线程

 

第二种:

   在线程外部,调用interrupt() 给线程发送了一个打断的信号, 线程的run中使用isInterrupted()来判断该线程是否被打断过

 

 

第三种方式:

在线程外部,调用interrupt() 给线程发送了一个打断的信号, 并且抛出一个InterruptedException, 可以在run()方法捕获这个异常, 需要让线程sleep()

 

 

两个人同时取钱:

   两个线程对象:   name   取钱

   账号对象:  余额    取钱

 

隐藏问题:

   因为多个线程同时访问同一个数据,(共享数据), 出现数据中间状态值(修改)丢失,解决方案,给共享数据加锁,  

  Synchronized: 同步

 

  1. 在方法上使用Synchronized, 该方法叫做 同步方法,  锁是在加载this

 

  1. 使用同步代码块

 

同步代码块与同步方法的区别:

  1. 同步代码块的加锁的对象可以任意  Synchronized(加锁对象)
  2. 同步方法是对同步方法所在类的对象加锁, 给this加锁

 

 

面试题:  一个类有多个同步方法, 某个线程正在执行该类的同步方法, 其他线程不能执行该类的同步方法, 因为获取不到this的锁, 但是可以执行非同步方法

 

缺点: 效率低,  容易造成死锁

 

猜你喜欢

转载自blog.csdn.net/qian_qian_123/article/details/82284188