java中多线程介绍

来源:互联网 发布:计算机专业不想编程 编辑:程序博客网 时间:2024/06/02 00:38
1.创建线程的2中方式
a)Extends Thread; 编写run方法
b)Implements Runnable:重写run方法

2.线程的5种状态(创建、就绪、执行、阻塞、死亡)


注意:阻塞状态和运行状态是不能直接达到的,需要回归到就绪状态。

a)T.start(); 是线程进入就绪状态,Runnable状态
b)等待cpu的调度,调度后才能进入Running运行状态
c)调用sleep/yield/会进入阻塞状态,直到被唤醒
i.Thread.sleep();调度线程(当前线程)休眠进入阻塞状态,时间到后自动就绪
     可以制定时间,交出cpu的执行权,能让比自己低(等、高)的优先级线程得到执行。
ii.Yield();交出cpu的控制权,但是cpu后期调度谁,不好说,可能还是自己
   不能制定时间,只能让和自己同优先级的线程得到执行
iii.T.join();表示等到t线程被执行完后才会继续执行调度线程
iv.Wait()只有wait会释放对象锁,直到调用notify/notifyAll或者超时
    notify/notifyAll调用时,并不会立即释放对象锁,而是等到synchronizati块执行完毕。
d)死亡状态(正常死亡好)
i.Systerm.exit(1): 退出JVM
3.线程的优先级(setPriroty)
a)Min=1; norm = 5; max =10
b)设置优先级只是说明被cpu调度的概率大
4.线程同步和死锁
a)每个对象都有锁
b)获取对象锁的方法 synchronized (xxx.class) 
i.如果拿不到锁,则进入到所锁对象的锁池,等待该对象的锁通知锁池中的对象
C) 死锁
1.出现死锁原因
a)对象方法的执行需要多把锁,锁之间又相互引用
b)资源被共享
----------------------------------------------------------------------------------------------------------------------------------------
1. 为什么Thread.Stop()和Thread.Suspend()过时不用?
      Stop不安全:是暴力终止线程的方法,当线程执行到sync块的一部分时,调用stop则会立即终止线程,造成数据不连贯一致。提倡用标记来终止run方法或者interrupt
     suspend是容易发生死锁:suspend不会释放资源锁,如果其他线程想在拿到被锁定的资源锁后恢复该挂起线程,则会造成死锁。推荐用wait代替。
0 0
原创粉丝点击