java 多线程Thread与runnable的区别

java中实现多线程的方法有两种:继承Thread类和实现runnable接口
1,继承Thread类,重写父类run()方法
public class thread1 extends Thread {
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("我是线程"+this.getId());
}
}
public static void main(String[] args) {
thread1 th1 = new thread1();
thread1 th2 = new thread1();
th1.run();
th2.run();
}
}
run()方法只是普通的方法,是顺序执行的,即th1.run()执行完成后才执行th2.run(),这样写只用一个主线程。多线程就失去了意义,所以应该用start()方法来启动线程,start()方法会自动调用run()方法。上述代码改为:
public class thread1 extends Thread {
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println("我是线程"+this.getId());
}
}
public static void main(String[] args) {
thread1 th1 = new thread1();
thread1 th2 = new thread1();
th1.start();
th2.start();
}
}
通过start()方法启动一个新的线程。这样不管th1.start()调用的run()方法是否执行完,都继续执行th2.start()如果下面有别的代码也同样不需要等待th2.start()执行完成,而继续执行。(输出的线程id是无规则交替输出的)
2,实现runnable接口
public class thread2 implements Runnable {
public String ThreadName;
public thread2(String tName){
ThreadName = tName;
}
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println(ThreadName);
}
}
public static void main(String[] args) {
thread2 th1 = new thread2("线程A");
thread2 th2 = new thread2("Thread-B");
th1.run();
th2.run();
}
}
和Thread的run方法一样Runnable的run只是普通方法,在main方法中th2.run()必须等待th1.run()执行完成后才能执行,程序只用一个线程。要多线程的目的,也要通过Thread的start()方法(runnable是没有start方法)。上述代码修改为:
public class thread2 implements Runnable {
public String ThreadName;
public thread2(String tName){
ThreadName = tName;
}
public void run() {
for (int i = 0; i < 10000; i++) {
System.out.println(ThreadName);
}
}
public static void main(String[] args) {
thread2 th1 = new thread2("线程A");
thread2 th2 = new thread2("Thread-B");
Thread myth1 = new Thread(th1);
Thread myth2 = new Thread(th2);
myth1.start();
myth2.start();
}
}
总结:实现java多线程的2种方式,runable是接口,thread是类,runnable只提供一个run方法,建议使用runable实现 java多线程,不管如何,最终都需要通过thread.start()来使线程处于可运行状态。
以上就是关于java多线程的实例详解,如有疑问请留言或者到本站社区交流讨论,本站关于线程的文章还有很多,希望大家搜索查阅,大家共同进步!
# java
# 多线程
# 多线程thread和runnable的对比
# Java多线程ThreadPoolExecutor详解
# Java中使用Thread类和Runnable接口实现多线程的区别
# Java多线程Thread类的使用及注意事项
# Java超详细讲解多线程中的Process与Thread
# Java多线程 ThreadLocal原理解析
# Java多线程ThreadAPI详细介绍
# Java使用Thread创建多线程并启动操作示例
# java多线程Thread的实现方法代码详解
# Java多线程Thread类的使用详解
# 我是
# 也要
# 不需要
# 如有
# 希望大家
# 重写
# 要多
# 有两种
# 只提供
# 后才
# 还有很多
# 方法来
# 应该用
# 共同进步
# 疑问请
# 法会
# 失去了
# 运行状态
# 完成后
相关文章:
如何在IIS服务器上快速部署高效网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
做企业网站制作流程,企业网站制作基本流程有哪些?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站专业制作公司有哪些,做一个公司网站要多少钱?
,有什么在线背英语单词效率比较高的网站?
建站之星各版本价格是多少?
手机网站制作与建设方案,手机网站如何建设?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何挑选高效建站主机与优质域名?
建站主机选购指南:核心配置与性价比推荐解析
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
建站之星2.7模板:企业网站建设与h5定制设计专题
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Python lxml的etree和ElementTree有什么区别
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何用免费手机建站系统零基础打造专业网站?
网站微信制作软件,如何制作微信链接?
如何在Golang中指定模块版本_使用go.mod控制版本号
广州建站公司哪家好?十大优质服务商推荐
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
深入理解Android中的xmlns:tools属性
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何通过万网虚拟主机快速搭建网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何通过可视化优化提升建站效果?
如何在建站之星绑定自定义域名?
如何在Windows 2008云服务器安全搭建网站?
建站之星导航如何优化提升用户体验?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
建站之星安装路径如何正确选择及配置?
一键网站制作软件,义乌购一件代发流程?
如何快速搭建安全的FTP站点?
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站主机是否属于云主机类型?
微课制作网站有哪些,微课网怎么进?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
非常酷的网站设计制作软件,酷培ai教育官方网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
b2c电商网站制作流程,b2c水平综合的电商平台?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
学校建站服务器如何选型才能满足性能需求?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
盐城做公司网站,江苏电子版退休证办理流程?
如何用VPS主机快速搭建个人网站?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何通过FTP服务器快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。