您的位置:首页 > 其它

线程的生命周期与线程的同步

2011-09-14 22:07 99 查看
 
     20110906      线程的生命周期和线程的同步
1、          新建状态。  当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。

2、          就绪:线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源

3、          运行:线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

4、          死亡 :自然终止:正常运行run()方法后终止

异常终止:调用stop()方法让一个线程终止运行

5、          堵塞

a)       Sleep()  将程序睡眠。 当时间到了。恢复到就绪状态

b)      Wait()   调用motify()(唤醒线程)方法回到就绪状态

c)       Suspend() 被另一个线程所阻塞 resume()方法恢复

6、          线程的优先级

a)       把线程从就绪状态进入运行状态的过程叫做线程调度,负责调度工作的机构叫做调度管理器

b)      优先级 线程的优先级的取值范围是1—10

                       i.              MAX_PRIORITY

                     ii.              NORM_PRIORITY

                  iii.              MIN_PRIORITY

                  iv.              得到货修改线程的优先级  final int getPriority()       final void setPriority(int newPriority)

7、          常用方法 run() start() sleep(long t)  sleep(long millis,int nanos) nanos参数为有纳秒

a)       Yield() 暂停线程,让步的方法  当前线程进入就绪状态,不是堵塞状态。

b)      Join() 方法  让线程加入执行,执行某一线程join方法的线程会被冻结,等待某一线程执行结束,该线程才会恢复到可运行状态

c)       Wait()   与notify() 方法  是成对。  暂停和恢复

d)      interrupt():  清楚线程的冻结状态  强制清楚

e)       stop()  有风险,终止。已过时 

停止方法: 1。在循环设置标志,判断用break跳出循环

2.线程处于堵塞状态, interrupt()  中断线程 interrupted()测试是否中断。在第一次调用已清除了其中断状态之,且第二次调用检验完中断状后态前,当前线程再次中断的情况除外,如果连续两次调用该方法,则第二次调用将返回 false     isIterrupted() 此时线程是否已经中断,线程的中断状态不受该方法的影响。

      f) isAlive()  判断是否为活动的线程。

      g) setDaemon(true)   该方法要在线程开启前使用, 和前台线程一样开启,病抢资源运行。所不同的是,当前台线程都结束 后,后台线程会自动结束。无论后台线程处于什么状态都会自动结束

      h) currentThread()   获取到当前的线程对象  然后  t1.getName()  获得线程名字

9、线程的同步 Synchronization

      互斥锁  标记,这个标记用来保证在任一时刻,只能有以个线程访问该对象  关键字  synchronized   用来与对象的互斥锁联系

 加锁方式   synchronized(this){}   在方法声明中,表示整个方法为同步方法   

                      Public synchronized char pop(){} 同步方法只有一个。

锁的是对象。

好处  解决了线程安全问题

弊端  降低了运行效率

           同步嵌套,容易出现死锁。

解决死锁  wait() 方法

          

     

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息