黑马程序员技术交流社区
标题:
学习笔记-线程
[打印本页]
作者:
李云贵
时间:
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