线程的两种创建及线程池——学习二

来源:互联网 发布:汉诺塔递归算法机制 编辑:程序博客网 时间:2024/06/05 03:36

一、使用实现接口Runnable来创建新的多线程

         创建分四步

1.实现接口Runnable并重写它唯一的方法run()

        public class MyThreadTest implements Runnable{
 public void run(){

程序code

}

}

2.创建实现Runnable类的对象,其类型是Runnable

Runnable r1 = new MyThreadTest();

3.由Runnable创建一个Thread的对象

           Thread t = new Thread(r1);

4.由thread 的对象启动线程

t.start();

package com.bing.jia;public class MyThreadTest implements Runnable{public void run(){for(int i=0;i<100;i++){if(i%10==0){System.out.println(Thread.currentThread().getName()+"-------"+i);}System.out.println(Thread.currentThread().getName()+"    "+i);try {Thread.sleep(1000*2);//Thread.sleep(2000, 10000);System.out.println("线程睡眠2秒");} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {Runnable r1 = new MyThreadTest();Runnable r2 = new MyThreadTest();new Thread(r1).start();new Thread(r2).start();}}


执行结果:

Thread-0-------0Thread-0    0Thread-1-------0Thread-1    0线程睡眠2秒线程睡眠2秒Thread-0    1Thread-1    1


二、使用继承Thread类的方法来创建新的多线程

这种方法已经不被推荐使用。如果创建的线程很多的话,推荐使用线程池来创建。
package com.bing.jia;public class MyThreadTest extends Thread{public void run(){for(int i=0;i<100;i++){if(i%10==0){System.out.println(Thread.currentThread().getName()+"-------"+i);}System.out.println(Thread.currentThread().getName()+"    "+i);try {Thread.sleep(1000*2);//Thread.sleep(2000, 10000);System.out.println("线程睡眠2秒");} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {new Thread().start();new Thread().start();}}
执行结果:
Thread-0-------0Thread-0    0Thread-1-------0Thread-1    0线程睡眠2秒Thread-0    1线程睡眠2秒Thread-1    1线程睡眠2秒Thread-0    2线程睡眠2秒Thread-1    2

注意:可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。

警告:不论是继承thread还是实现Runnable来创建线程,都不要直接调用run()方法,这样只会执行线程中的任务,但是它不会创建一个线程。不论以何种方式创建线程,都是用Tread.start()方法,这个方法将创建一个执行run()方法的新线程。

阅读全文
0 0
原创粉丝点击