两种实现 多线程 方式的对比分析:实现Runnable接口相对 于继承Thread类来说的好处
1.适合多个相同程序代码的线程去处理同一个资源的情况,把虚拟CPU(线程)同程序代码、数据有效分离较好的体现 了面向对象的设计思想
2.可以避免由于java单继承特性带来的局限。。即当我们要将已经继承了某一个类的子类 放入多线程中,
由于一个类不能同时有两个父类所以不能用继承Thread类的方式。所以就只能用Runnable接口来实现了
3.有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的,多个线程可以操作相同的数据,与代码无关。当共享相同的对象时,即共享相同的数据。当线程被构造时,需要的代码和数据通过 一个对象 作为构造函数实参传递进去,这个对象 就是一个实现 了Runnable接口的类的实例。
后台线程与联合线程:1.后台线程与setDaemon方法
简单的说吧前台线程结束这个程序就结束。只要有一个前台线程在运行那么就没有结束如果只有后台线程在运行那么这个程序就会挂掉
我们以前用到的都是前台进程,如果对某个线程对象 启动(start方法)之前调用了setDaemon(true)方法,这个线程就会变成后台线程。
- public class DemonThread
- {
- public static void mian(String[] args)
- {
- ThreadTest t=new ThreadTest();
- Thread tt=new Thread(t);
- tt.setDaemon(true);
- tt.start();
- }
- }
- // 何问起 hovertree.com
- class ThreadTest implements Runnable
- {
- public void run()
- {
- while(true)
- {
- System.out.println(Thread.currentThread().getName()+" is running.")
- }
- }
- }//这里我们虽然创建了一个无限循环的线程,因为他是后台线程整个进程在主线程结束时就终止了运行。这就说明了上面的理论。
复制代码
2.联合线程与join方法:
join(long millis)和join(long millis,int nanos)这是两个带参数的join方法,他们是两个线程合并指定的时间后又开始分离回到以前的样子
还有一个是无参数的join方法
方法名.join(),即pp.join();语句 他的作用就是把pp所对应的线程合并到调用 pp.join();语句的线程中
|
|