A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李云贵 中级黑马   /  2014-7-21 09:16  /  1508 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程的两种实现方法:继承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操作的完成。

5 个回复

倒序浏览
你这个可以写入博客么。。。
回复 使用道具 举报
很完善,,,,
回复 使用道具 举报
围观一下
回复 使用道具 举报
总结的很好,赞一个!
回复 使用道具 举报
学习了,不用自己总结了,直接用你的饿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马