Java多线程(2)--Thread类继承和Runnable接口创建线程

Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。

Thread类的特性
每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体,通过该Thread对象的start()方法来启动这个线程,而非直接调用run()。


JDK1.5之前创建新执行线程有两种方法:
①继承Thread类的方式 (点击查看Thread类相关常用的方法)
②实现Runnable接口的方式


方式一:继承Thread类

①定义子类继承Thread类。
②子类中重写Thread类中的run方法。
③创建Thread子类对象,即创建了线程对象。
④调用线程对象start方法:启动线程,调用run方法。

继承Thread的子类MyThread

public class MyThread extends Thread{@Overridepublic void run() { //该方法体即为该线程要执行的程序for (int i = 0;i < 50;i++){if (i % 2 == 0) System.out.println(i);}}
}

创建线程对象并执行

public class TestThread {public static void main(String[] args) {//创建线程MyThread thread = new MyThread();//启动该线程,并执行run()方法thread.start();//以下是不同于thread的线程for (int i = 0; i < 50; i++) {if (i % 2 == 0) {System.out.println(i + "#####");}}}
}

结果(仅截取部分)
在这里插入图片描述
在这里插入图片描述
该结果随着计算机的不同会有不同的情况,不定。但要表达的意思就是多线程执行的情况下不同线程是并行的。

在这里插入图片描述
注意点:
①如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。
②run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU调度决定。
③启动多线程,必须通过调用start()方法。
④一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出异常“IllegalThreadStateException”。


方式二:实现Runnable接口

①定义子类,实现Runnable接口。
②子类中重写Runnable接口中的run方法。
③通过Thread类含参构造器创建线程对象。
④将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
⑤调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。

实现Runnable接口的类

public class MThread implements Runnable{@Overridepublic void run() {for (int i = 0; i < 100; i++) {if (i % 2 == 0){System.out.println(i);}}}
}

创建对象并执行

public class TestThread {public static void main(String[] args) {MThread thread = new MThread();Thread curThread = new Thread(thread);curThread.start();}
}

继承方式和实现方式的联系与区别

开发中:优先选择:实现Runnable 接口的方式
原因:①实现的方式没有类的单继承性的局限性。②实现的方式更适合来处理多个线程有共享数据的情况。

联系: public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑写在在run()中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab在电磁场与电磁波中的应用,matlab在电磁场与电磁波学习中的应用.docx

matlab在电磁场与电磁波学习中的应用.docx MATLAB在电磁场与电磁波学习中的应用裴逸菲(燕京理工学院信息科学与技术学院&#xff0c;河北廊坊065201)摘要针对电磁场与电磁波在大学课程中的理论性强、概念抽象的特点&#xff0c;在学习中引入MATLAB软件&#xff0c;利用MATLAB的…

Java多线程(3)--线程的生命周期

JDK中用Thread.State类定义了线程的五种状态 要想实现多线程&#xff0c;必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程&#xff0c;在它的一个完整的生命周期中通常要经历如下的五种状态&#xff1a; ①新建&#xff1a; 当一个Thread类或…

m序列自相关matlab代码,m序列的输出及其自相关序列

【例10-2】 设m序列的生成多项式为g(x)1x^3x^4&#xff0c;求&#xff1a;(1)m序列的输出及其自相关序列&#xff1b;(2)脉冲波形成为矩形脉冲p(t){1 0≤t≤Tc 画出m序列信号的自相关函数&#xff1b;{0 其它 &#xff0c;(3)设脉冲波形为升余弦函数(滚降系数a0)&#xff0c;画…

JDK 10:从Java访问Java应用程序的进程ID

StackOverflow.com上一个普遍的问题是&#xff1a;“ Java程序如何获得自己的进程ID&#xff1f; 与该问题相关的几个答案包括解析ManagementFactory返回的String 。 getRuntimeMXBean&#xff08;&#xff09; 。 getName&#xff08;&#xff09; [但是可以提供“任意字符串”…

Java多线程(4)--线程的同步解决线程安全问题

多线程出现安全问题 问题的原因&#xff1a; 当多条语句在操作同一个线程共享数据时&#xff0c;一个线程对多条语句只执行了一部分&#xff0c;还没有执行完&#xff0c;另一个线程参与进来执行&#xff0c;导致共享数据的错误。 解决办法&#xff1a; 对多条操作共享数据的…

java中套接字,如何在java中获得一个开放的套接字?

在Java中,我如何获得一个开放的套接字&#xff1f;我有2个JFrame;在第一个JFrame中,我打开了Client socket的连接.在同一个JFrame中,我创建了另一个JFrame(JFrame2)的实例.现在我想从JFrame1获取相同的Socket到JFrame2继续与我的服务器Socket交谈&#xff1a;login.java(First …

Java多线程(5)--线程通信wait和notify

例题&#xff1a;使用两个线程打印 1-100。线程1, 线程2 交替打印。 解决&#xff1a;涉及wait()和notify()/notifyAll() class Communicate implements Runnable {private int number 1;Overridepublic void run() {while (true) {synchronized (this) {this.notify();if (…

matlab eig 复杂度,MATLAB中的eig函数

在MATLAB中&#xff0c;计算矩阵A的特征值和特征向量的函数是eig(A)&#xff0c;常用的调用格式有5种&#xff1a;Eeig(A)&#xff1a;求矩阵A的全部特征值&#xff0c;构成向量E。[V,D]eig(A)&#xff1a;求矩阵A的全部特征值&#xff0c;构成对角阵D&#xff0c;并求A的特征向…

spring常见面试问题_Spring面试问题

spring常见面试问题另外&#xff0c;请查看我们最新的文章69Spring面试问题与解答–最终清单 。 1&#xff09;什么是春天&#xff1f; 回答&#xff1a; Spring是控件和面向方面的容器框架的轻量级反转。 2&#xff09;解释春天&#xff1f; 回答&#xff1a; 轻巧&#x…

Java多线程(6)--Callable接口创建线程

与使用Runnable相比&#xff0c; Callable功能更强大些 ①相比run()方法&#xff0c;可以有返回值 ②方法可以抛出异常 ③支持泛型的返回值 ④需要借助FutureTask类&#xff0c;可以获取返回结果 Future接口 ①可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完…

matlab谱系聚类图,如何看懂SPSS聚类分析的树状图/谱系图?

原创&#xff1a; 数据小兵 SPSS统计训练营SPSS聚类分析提供两种类别图形的输出&#xff0c;第一种是软件默认的“冰柱图”&#xff0c;形状类似于冬天屋檐上垂下的冰柱&#xff0c;因此得名。第二种是“树状图”&#xff0c;在新版本软件中也称谱系图&#xff0c;像一个横着生…

Java多线程(7)--线程池创建线程

经常创建和销毁、使用量特别大的资源&#xff0c;比如并发情况下的线程&#xff0c;对性能影响很大。 提前创建好多个线程&#xff0c;放入线程池中&#xff0c;使用时直接获取&#xff0c;使用完放回池中&#xff0c;可以避免频繁创建销毁、实现重复利用。 使用线程池好处&a…

在Google Cloud Platform的K8上运行Fn函数

最近&#xff0c;我在Functions和Project Fn中玩了很多游戏。 最终&#xff0c;我不得不离开笔记本电脑上的操场&#xff0c;进入真正的野生世界。 在K8s集群上运行Fn的想法对我来说很有吸引力&#xff0c;因此我决定在Prem或云中的某个地方进行操作。 在对如何在裸机上自行安装…

php判断对象属于哪个类,PHP instanceof:判断对象是否属于某个类

使用 PHP 中的 instanceof 运算符&#xff0c;可以判断一个对象是否属于某一个类&#xff0c;语法格式如下&#xff1a;对象名 instanceof 类名;【示例】使用 instanceof 判断一个对象是否属于某个类。class A{}class B{}$obj new A;var_dump($obj instanceof A);echo ;var_du…

Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识

文章目录String类StringBuffer类StringBuilder类String&#xff1a;不可变的字符序列&#xff1b;底层使用char[]存储 StringBuffer&#xff1a;可变的字符序列&#xff1b;线程安全的&#xff0c;效率低&#xff1b;底层使用char[]存储 StringBuilder&#xff1a;可变的字符序…

hybbs接口php,HYBBS

#HYBBS官方地址: http://bbs.hyyyp.com论坛基于HYPHP框架开发MVC结构支持HOOK机制PDO操作SQL,支持众多数据库论坛特性服务器环境要求:支持子目录安装论坛PHP 5.3 包括5.3 , 5.3以上环境Apache || Nginx || IIS需要开启伪静态,否则无法安装~!数据库支持 : MYSQL , MSSQL ,Oracle…

Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面

文章目录java.lang.System类java.util.Date类java.sql.Date类java.text.SimpleDateFormat类java.util.Calendar(日历)类java.time类java.time.Instant类java.time.format.DateTimeFormatter 类其它APIjava.lang.System类 System类提供的public static long currentTimeMillis(…

apache camel_Apache Camel简介

apache camelApache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎&#xff0c;可帮助开发人员以各种特定于域的语言&#xff08;DSL&#xff09;&#xff08;例如Java&#xff0c;Spring / XML&#xff0c;scala等&#xff09;创建路由和中介规则。 骆驼…

oracle括号不区分中英,Oracle的sql语句,查询条件加括号与不加括号区别 -

例如:SELECT ename, job, deptnoFROM empWHERE deptno in (10, 20)AND (ename like ‘%I‘ OR job like ‘%ER‘);执行该sql&#xff0c;结果集如下&#xff1a;1 JONES MANAGER 202 CLARK MANAGER 10去掉上面sql查询条件中的括号&a…

Java常用类(3)--Java比较器Comparable、Comparator类

文章目录自然排序&#xff1a;java.lang.Comparable定制排序&#xff1a;java.util.Comparator自然排序&#xff1a;java.lang.Comparable Comparable接口强行对实现它的每个类的对象进行整体排序&#xff0c;这种排序被称为类的自然排序。 实现 Comparable 的类必须实现 com…