java里,实现多线程,有两种方式,一种是继承Thread,一种是实现Runnable接口。
1.继承Thread
1.1定义继承类
class T extends Thread{ private int flag = 30; @Override public void run() { super.run(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } for(int i=0;i<=30;i++){ if(flag>-1){ System.out.println("线程" + Thread.currentThread().getId() +"===== say:" +flag--); } } } }
public static void main(String[] args) { T t1 = new T(); T t2 = new T(); t1.start(); t2.start(); }1.3运行结果
线程9===== say:30 线程8===== say:30 线程8===== say:29 线程8===== say:28 线程8===== say:27 线程8===== say:26 线程8===== say:25 线程8===== say:24 线程8===== say:23 线程8===== say:22 线程8===== say:21 线程8===== say:20 线程8===== say:19 线程8===== say:18 线程8===== say:17 线程8===== say:16 线程8===== say:15 线程8===== say:14 线程8===== say:13 线程8===== say:12 线程8===== say:11 线程8===== say:10 线程8===== say:9 线程8===== say:8 线程8===== say:7 线程8===== say:6 线程8===== say:5 线程8===== say:4 线程8===== say:3 线程8===== say:2 线程8===== say:1 线程8===== say:0 线程9===== say:29 线程9===== say:28 线程9===== say:27 线程9===== say:26 线程9===== say:25 线程9===== say:24 线程9===== say:23 线程9===== say:22 线程9===== say:21 线程9===== say:20 线程9===== say:19 线程9===== say:18 线程9===== say:17 线程9===== say:16 线程9===== say:15 线程9===== say:14 线程9===== say:13 线程9===== say:12 线程9===== say:11 线程9===== say:10 线程9===== say:9 线程9===== say:8 线程9===== say:7 线程9===== say:6 线程9===== say:5 线程9===== say:4 线程9===== say:3 线程9===== say:2 线程9===== say:1 线程9===== say:0
2.实现Runnable接口
2.1定义实现接口的类
class R implements Runnable{ private int flag = 30; @Override public void run() { for(int i=0;i<=300;i++){ if(flag>-1){ System.out.println("线程" + Thread.currentThread().getId() +"===== say:" +flag--); } } } }
R r1 = new R(); Thread t1 = new Thread(r1); Thread t2 = new Thread(r1); t1.start(); t2.start();
线程8===== say:30 线程8===== say:29 线程8===== say:28 线程8===== say:27 线程8===== say:26 线程9===== say:25 线程9===== say:24 线程9===== say:23 线程9===== say:22 线程9===== say:21 线程9===== say:20 线程9===== say:19 线程9===== say:18 线程9===== say:17 线程9===== say:16 线程9===== say:15 线程9===== say:14 线程9===== say:13 线程9===== say:12 线程9===== say:11 线程9===== say:10 线程9===== say:9 线程9===== say:8 线程9===== say:7 线程9===== say:6 线程9===== say:5 线程9===== say:4 线程9===== say:3 线程9===== say:2 线程9===== say:1 线程9===== say:0
1.r1和r2共同执行
2.资源共享(flag被两个线程使用)
在现实工作中,我们肯定是比较多的使用实现runnable接口的方式,因为java是单继承,实现runnable能比较方便的实现资源共享