线程小结

 

1,  线程的四种状态:newrunnableblockeddead

2,  new状态:线程刚刚被创建,还没有调用start方法。

3,  runnable状态:线程调用start()方法以后。

注:处于runnable状态的线程不一定会被执行,要看操作系统会不会给分配时间片。

4,  blocked状态:

处于runnable状态的线程在以下五种情况下会转入到blocked状态:

a,  sleep()方法被调用

b,  wait()方法被调用。

c,  等待io结束

d,  等待文件锁。

e,  suspend()方法被调用。

处于blocked状态的线程会在以下情况下转入到runnable状态

a,  sleep()方法中的时间结束

b,  被其他线程的notify()或者notifyAll方法唤醒。

c,  等待的文件锁得到

d,  Io结束

e,  resume()方法被执行。

5,  终止状态

a,  run方法执行结束。

b,  stop()方法被调用。

6,  无法区分处于runnable状态的线程是否正在运行。

无法区分一个线程是处于刚刚创建的状态还是死亡状态。

无法区分一个线程是处于runnable状态还是blocked状态。

isAlive()方法是判断是处于活动状态(runnableblocked的和)还是其它状态。

7,  resume()方法只有在suspend方法被调用的时候才有效,不推荐。

8,  join()方法。让其他线程等待,直到本线程执行完毕。

9,  run方法中,不赞成直接使用stop方法在停止自身线程,这就意味着我们必须在run方法中不断的进行判断,来决定自身是否应该被停止。

10,              在一个windows系统中,线程可以不调用sleep方法,其它线程也可以获得时间片,但是如果换作其他线程就必须不时调用sleep或者yield方法,以使其他线程获得时间片。尤其在网络变成过程中,由于不能确定自己程序所处的操作系统环境,就更要注意。

11,              等待进入同步方法的进程和调用wait方法的进程有着本质的区别:等待进入同步方法的进程一旦获得对象锁之后,会自动进入。但是调用wait方法以后的进程会放弃自己所获得的锁对象,并会一直处于blocked状态,直到另外某个进程调用了notify方法或者notifyAll方法。

12,              notifyAll方法唤醒所有处于blocked状态的线程,notify方法随机唤醒一个。因此notify方法是不安全的。可能会导致死锁。

13,              java语言并没有可以预防死锁的机制,因此在设计多线程程序时候,必须要保证每一个被阻塞的线程迟早会被通知。或者有一个线程会一直运行。

14,              使用stop方法suspend方法都是不明智的。stop方法会强行关闭线程,因此是不安全的。Suspend方法在把线程挂起的时候,不会释放改线程的对象锁,因此会导致死锁。

15,              有一个可以把线程锁住,而且不会导致死锁的方法,教科书:38

16,              setDaemon(),这是服务线程,把当前线程设置为服务线程,表明当前线程是为其他线程服务的,如果其他所有线程都停止了,那么本线程也就停止了。

17,              使用管道进行线程通讯的最重要理由是为了让线程变得简单。生产者只需要把生产的数据放入管道,消费者只需要从管道中获得数据,而不用考虑同步性

18,              当一个线程获取某个对象的一个同步方法的对象锁的时候,其它线程就无法访问该对象的所有同步方法。

19,              Synchronaized用于类方法的时候,对象锁来自于this.class实例。

20,              Synchronaized用于对象方法的时候,对象锁来自于this实例

21,              Sleep方法:不会释放对象锁,但是会把cpu时间让给他人。线程具有的方法。

22,              Wait方法,释放对象锁,直到notify或者notifyall被调用。对象具有的方法。在同步方法中被调用。因为wait方法如果在没有获取对象锁的情况下被调用的话,会抛出IllegalmonitorStateException

23,              Sleep是静态方法,因此最佳的调用方式是Thread.sleep()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值