创建线程
重写run方法,创建Thread对象start起来
用Thread的构造器Thread(Runnable target)创建出一个Thread对象,start起来。
临时阻塞
线程一旦启动run方法就会加入CPU执行队列中,进入等待CPU执行的状态.这个时候如果CPU没有执行该线程而去执行其他任务,则该线程进入了临时阻塞状态,如果CPU的执行权切换到该线程,则继续执行run方法。
还可以在得到执行权的时候调用Thread.yeild()
语句,释放执行权。
冻结
sleep()方法:这个方法会使线程冻结,如果执行到的代码块具有原子性,冻结的时候不会释放锁。sleep时间到,则线程回到运行状态。
suspend()方法和resume()方法:当线程调用suspend
方法时,与sleep一样,但需要用resume来唤醒线程,目前该方法已弃用。容易造成死锁,下面会介绍。
waite()方法和notify()方法或者nofityAll()
方法:notify表示随机唤醒冻结线程池里面的任一线程,notifyAll表示唤醒冻结线程池中的所有线程。
消亡
run()
方法结束,自然而然线程也就等待被回收了。可以使用volatile
修饰的标记位。使用stop()。确实能退出,但是不安全,官方已弃用。stop的线程会抛error:java.lang.ThreadDeath,可用try run方法中的代码块来catch Throwable.
使用interrupt()方法,可分为两种情况线程处于冻结状态,例如使用了Thread.sleep()方法,如果sleep时间还没到,这个时候调用Thread#interrupt()则会抛InterruptedException,然后继续执行run方法直到退出。
死锁的必要条件
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。








网友评论