java 多线程 两种实现方式

来源:互联网 发布:网吧网络系统维护公司 编辑:程序博客网 时间:2024/05/16 01:38

java里,实现多线程,有两种方式,一种是继承Thread,一种是实现Runnable接口。


1.继承Thread

1.1定义继承类

class T extends Thread{private int flag = 30;@Overridepublic 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--);}}}}


1.2直接在main方法调用

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

结论1.并不是t1执行完毕,再执行t2(很类似ajax的异步)2.资源不是共享(falg分别被减小)

2.实现Runnable接口

2.1定义实现接口的类

class R implements Runnable{private int flag = 30;@Overridepublic void run() {for(int i=0;i<=300;i++){if(flag>-1){System.out.println("线程" + Thread.currentThread().getId() +"===== say:" +flag--);}}}}

2.2在main调用线程

R r1 = new R();Thread t1 = new Thread(r1);Thread t2 = new Thread(r1);t1.start();t2.start();

2.3运行结果

线程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能比较方便的实现资源共享

0 0