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
- java多线程------实现多线程两种方式
- Java实现多线程的两种方式
- Java两种方式实现多线程对比
- java--多线程实现两种方式
- Java实现多线程的两种方式
- Java多线程实现的两种方式
- java多线程两种实现方式
- Java 多线程实现的两种方式
- Java中的两种多线程实现方式
- java 多线程 两种实现方式
- Java多线程的两种实现方式
- JAVA多线程实现的两种方式
- java 实现多线程的两种方式
- Java实现多线程的两种方式
- JAVA多线程实现的两种方式
- Java实现多线程的两种方式
- Java的两种多线程实现方式
- java多线程实现的两种方式
- Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告
- Storyboard应用:快速创建及设置View
- 2015GPNU新生赛题解
- 各种编程语言做逆向工程UML图的软件
- Linux SWAP 交换分区配置说明
- java 多线程 两种实现方式
- angular 双向绑定的实现原理
- python之类--socket
- memcpy的用法
- Unity5.3Json测试学习
- 【MFC】 Unicode下CString和char *之间的互相转换
- 吐槽java之《程序员的呐喊》读后总结
- Linux 中交换空间 (swap)应该分多大才好?
- maven