黑马程序员技术交流社区

标题: 学习笔记-线程 [打印本页]

作者: 李云贵    时间: 2014-7-21 09:16
标题: 学习笔记-线程
线程的两种实现方法:继承Tread类和实现Runable接口。
线程
线程(thread)是控制线程(thread of control)的缩写。
线程有:自己的方法代码,方法中定义的局部变量(栈中),共享数据。
线程是独立的,局部变量不能被其他线程访问,若两个线程同时访问同一个方法,每个现在讲各自得到属于自己的一份该方法的拷贝。
继承Thread类创建线程
1.自定义类ThreadType继承Thread类,在类中覆写Thread类的run()方法(Thread类中run为空方法,什么都不做)。
2.创建线程类对象 ThreadType tt=new ThreadType();
3.启动新线程 tt.start()。 新线程会自动调用run()方法。start方法不等run()执行完毕就返回了。
实现Runable接口创建线程
1.自定义类ThreadType实现Runable接口,在类中覆写Runable接口的run()方法(run方法由Runable提供)
2.创建Runable变量指向ThreadType对象 Runable rb=new ThreadType();
3.创建线程类对象 Thread td=new Thread(rb);//通过Thread类的来创建线程类对象
4.启动新线程 td.start()




线程周期
一个线程有4种状态:
new 新建。new后,start之前。可以用start进入启动状态,也可stop进入退出状态。
runnable 可运行。start之后。可运行状态不一定就在运行,取决于优先级和系统调度。
non runnable 不可运行。线程被挂起或发生阻塞。使用resume,notify或notifyAll可使其到可运行状态。
done 退出。调用stop()或者run()结束会自动到done状态。 done状态无法返回到其他状态。
            当程序所有线程均处于done状态,程序会被强制终止。
线程状态转换函数
start()          new--runnable


stop()           new/runnable--done     容易在虚拟机引起“死锁”,不建议使用。建议等自然终止
suspend()挂起    runnale--non runnable  容易在虚拟机引起“死锁”,不建议使用。建议sleep()或wait()
resume()恢复     non runnale--runnable  容易在虚拟机引起“死锁”,不建议使用。建议sleep()或wait()


sleep()暂停      runnable--non runnable--runnable sleep(long)毫秒,sleep(long,int)纳秒
wait()阻塞       runnable--non runnable--runnable
notify()解除阻塞 non runnable--runnable
yield()明确放弃执行 runnale--runnable
线程状态转换
线程进入runnable
1.其他线程调用notify()或者notifyAll(),唤醒non runnable状态的线程
notify()唤醒一个线程并允许它获得锁,notifyAll()唤醒所以等待这个对象的线程并允许它们获得锁。
2.线程调用sleep(),到时间后自动进入runnable状态。
3.线程对I/O操作的完成。
线程进入runnable
1.线程调用wait()。只有其他线程调用notify()或者notifyAll(),才会获得锁和被唤醒,然后改线程一直等待重新获得对象锁才继续执行。
2.线程调用sleep()的等待时间段。
3.线程等待I/O操作的完成。


作者: star5603    时间: 2014-7-21 09:39
你这个可以写入博客么。。。
作者: 阿磊    时间: 2014-7-21 09:59
很完善,,,,
作者: blz01003hm    时间: 2014-7-21 10:23
围观一下
作者: 微笑女皇    时间: 2014-7-21 12:53
总结的很好,赞一个!
作者: 渴望学习    时间: 2014-7-21 13:01
学习了,不用自己总结了,直接用你的饿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2