一、使用实现接口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-------0
Thread-0 0
Thread-1-------0
Thread-1 0
线程睡眠2秒
线程睡眠2秒
Thread-0 1
Thread-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-------0
Thread-0 0
Thread-1-------0
Thread-1 0
线程睡眠2秒
Thread-0 1
线程睡眠2秒
Thread-1 1
线程睡眠2秒
Thread-0 2
线程睡眠2秒
Thread-1 2
注意:可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。
警告:不论是继承thread还是实现Runnable来创建线程,都不要直接调用run()方法,这样只会执行线程中的任务,但是它不会创建一个线程。不论以何种方式创建线程,都是用Tread.start()方法,这个方法将创建一个执行run()方法的新线程。