多线程
来源:互联网 发布:html 点击按钮js自增 编辑:程序博客网 时间:2024/06/06 00:42
1.创建多线程的方式
两者都可实现多线程,一种是继承Thread类,一种是实现Runnable接口。实现方式分别如下
1)继承Thread类
public class Test { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); //只有通过start才会启动子线程并调用run方法,直接调用run方法和调用普通方法一样不会启动子线程 }} class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.out.println("主动创建的第"+num+"个线程"); }}
2)实现Runnable接口
必须将Runnable作为Thread类的参数,再使用Thread的start方法来启动线程执行该任务
public class Test { public static void main(String[] args) { System.out.println("主线程ID:"+Thread.currentThread().getId()); MyRunnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); }} class MyRunnable implements Runnable{ public MyRunnable() { } @Override public void run() { System.out.println("子线程ID:"+Thread.currentThread().getId()); }}
2.Thread和Runnable的区别和联系
Runnable相比Thread的优点有:
(1)避免单继承的局限性,继承了Thread类后就无法再继承其他类;
(2)适合多个相同代码处理统一资源的情况,代码和数据分隔开,提高程序的健壮性。一个Thread只能被start一次,但是一个Runnable可以放到
多个Thread中被start多次。
举例如下(卖票程序)
Thread的实现方式
class MyThread extends Thread{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("卖票:ticket"+this.ticket--); } } } }; public class ThreadTicket { public static void main(String[] args) { MyThread mt1=new MyThread(); MyThread mt2=new MyThread(); MyThread mt3=new MyThread(); mt1.start();//每个线程都各卖了10张,共卖了30张票 mt2.start();//但实际只有10张票,每个线程都卖自己的票 mt3.start();//没有达到资源共享 } }Runnable的实现方式:
class MyThread implements Runnable{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("卖票:ticket"+this.ticket--); } } } } public class RunnableTicket { public static void main(String[] args) { MyThread mt=new MyThread(); new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一个实例化对象mt,就会出现异常 new Thread(mt).start(); new Thread(mt).start(); } };
由上例可见,Thread的实现方式中每个线程都卖出了10张票,实际卖出了30张票,而Runnable的实现方式中三个线程一共卖出了10张票,达到了
资源共享的目的
3.线程的状态
线程的状态有:New(创建)、Runnable(就绪)、Blocked(阻塞)、Running(运行)、Dead(消亡)
其相互之间的关系如下图
Thread类的方法与线程状态之间的对应关系如下图:
阅读全文
0 0
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- python---对python的help命令内容写入特定文件中
- Ubuntu 搭建开发环境(QT+交叉编译)【嵌入式环境】
- 7台虚拟机HA高可用配置详细过程
- 我也不知道是啥
- Vue学习笔记九
- 多线程
- 数据库连接从每次建立连接到配置文件的解耦和连接池的使用
- mySQL之拷贝表及表结构
- Linux 新手必备基础命令
- Git提交和推送的区别
- 蓝牙BLE GATT完全分析和运用
- HDU 6186 CS Course(线段树区间操作)
- 机器学习实战 第十一章 代码问题
- Python中的格式化字符