当前位置:首页 > Java技术 > Java中多线程的创建

Java中多线程的创建

2022年11月07日 21:50:38Java技术6

 多线程的创建

方法一:继承于Thread类

1.遍历100以内的所有偶数
 1 /*
 2  *多线程的创建
 3  *一.继承于Thread类
 4  *1.创建一个Thread类的子类
 5  *2.重写Thread类的run()->将此线程执行的操作声明在run()方法中
 6  *3.创建Thread类的子类的对象
 7  *4.通过此对象调用start():(1)启动当前线程(2)调用当前线程的run()方法
 8  */
 9 //遍历100以内的所有偶数
10 
11 class MyThread extends Thread
12 {
13     @Override//重写run()
14     public void run() {
15         for(int i=0;i<100;i++)
16         {
17             if((i&1)==1)
18                 System.out.println(i);
19         }
20     }
21 }
22 public class test {
23 public static void main(String[] args) {
24     MyThread t1=new MyThread();//在主线程中建立子类对象
25     t1.start();//对象调用start()方法,第二个线程开始执行
26     //t1.run();如果调用run则不会使用多个进程
27     //如果还想再执行start(),不能用已经执行过start()的进程的对象,否则会报IllegalThreadStateException,可以再重新创建一个类对象
28     MyThread t2=new MyThread();
29     t2.start();
30     //第二个执行的同时,主线程执行下面过程
31     for(int i=0;i<100;i++)
32     {
33         if((i&1)==0)
34             System.out.println("*"+i+"*");
35     }
36 }
37 }

 

2.建立两个线程,分别遍历100以内的所有偶数和奇数
 1 //建立两个线程,分别遍历100以内的所有偶数和奇数
 2 //可以通过创建Thread匿名子类的方法
 3 class MyThread extends Thread
 4 {
 5     @Override//重写run()
 6     public void run() {
 7         /*for(int i=0;i<100;i++)
 8         {
 9             if((i&1)==1)
10                 System.out.println(i);
11         }*/
12     }
13 }
14 public class test {
15 public static void main(String[] args) {
16     
17     new Thread() {
18         public void run() {
19             for(int i=0;i<100;i++)
20             {
21                 if((i&1)==1)
22                     System.out.println(i);
23             }
24         }
25     }.start();
26     for(int i=0;i<100;i++)
27     {
28         if((i&1)==0)
29             System.out.println("*"+i+"*");
30     }
31     new Thread() {
32          public void run() {
33                 for(int i=0;i<100;i++)
34                 {
35                     if((i&1)==0)
36                         System.out.println("*"+i);
37                 }
38             }
39     }.start();
40 }
41 }

 

方法二:实现Runnable接口

 1 /*
 2  * 创建多线程的方式二:实现Runnable接口
 3  * 1.创建一个类实现Runnable接口
 4  * 2.实现类去实现Runnable中的抽象方法:run()
 5  * 3.创建实现类的对象
 6  * 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
 7  * 5.通过Thread类的对象调用start()
 8  */
 9 class MyThread implements Runnable
10 {
11     public void run()
12     {
13         for(int i=0;i<100;i++)
14         {
15             if((i&1)==0)
16             {
17                 System.out.println(Thread.currentThread().getName()+i);
18             }
19         }
20     }
21 }
22 
23 /*源码
24    target定义
25       //What will be run. 
26    private Runnable target;
27 
28    Thread的构造器
29      public Thread(Runnable target) {
30        init(null, target, "Thread-" + nextThreadNum(), 0);
31     }
32     
33    重写run()
34         @Override
35     public void run() {
36         if (target != null) {
37             target.run();
38         }
39     }
40 
41  */
42 public class test {
43     public static void main() {
44 MyThread mythread=new MyThread();
45 Thread t1=new Thread(mythread);
46 /*
47  * 通过Thread类的对象调用start():(1)启动线程(2)调用当前线程的run()
48  * t1.start()其实调用了当前线程的run()
49  * 通过看上面的源码发现即调用Runnable类型的target的run
50  * 也就是这里的MyThread.run()
51  */
52 t1.start();
53 Thread t2=new Thread(mythread);
54 t2.start();
55 }
56 }

 

两种创建线程的方法比较:

开发中优先选择实现Runnable接口的方式

原因:

1.实现的方式没有类的单继承的局限性

2.实现的方式更适合来处理多个线程有共享数据的情况

 

联系:Thread类本身也实现了Runnable接口 public class Thread implements Runnable

相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()方法中。

 

作者:zuiaimiusi
来源链接:https://www.cnblogs.com/zuiaimiusi/p/10831737.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68393.html

分享给朋友:

“Java中多线程的创建” 的相关文章

深入理解 Java 并发锁

深入理解 Java 并发锁

📦 本文以及示例源码已归档在 javacore 一、并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的...

枚举法 之Java实现凑硬币

问题? 如何利用1元五元十元凑硬币 Scanner in=new Scanner(System.in); int amout ; amout=in.nextInt(); for(int one =0;one<=amout;one+...

java数数字及while和do while 的使用,以及程序的调试与验证

while的条件是在进入循环体之前判断的,执行完一轮循环之后,会再回到循环开始的地方再次判断条件,而不会在循环体中随时判断条件 1.while语句是当条件满足时不断的执行循环体内语句。 2.会提前判断是否满足条件,所以有可能一次也没有执行。 3.条件成立...

Java打印车票主要学习Java的比较语句

直接上代码 public static void main(String[] args) { // TODO Auto-generated method stub //初始化 Scanner in=new Scanner(S...

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢!钢笔不限贵便宜,书法是来自心对手的交流。-泥沙砖瓦浆木匠 一.对象序列化当需要存储相同类型的数据,选...

Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较

Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 继续上一篇的容器文章认识容器,泥瓦匠慢慢带你们走进List的容器解说。今天泥瓦匠想说说 ArrayList 、LinkedList和Vector比较。...

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList 、LinkedList和Vector比较,今天泥瓦匠总结下Hash 、LinkedList和Vector比较。其实大家都是...

java 实现图片压缩

转载https://www.cnblogs.com/strongmore/p/14158639.html 添加依赖 <dependency> <groupId>net.coobird</groupId> <artifa...

Java 基础之详解 Java IO

Java 基础之详解 Java IO

Java IO 基本概念 Java IO:即 Java 输入 / 输出系统。 区分 Java 的输入和输出:把自己当成程序, 当你从外边读数据到自己这里就用输入(InputStream/Reader), 向外边写数据就用输出(OutputStream/Writer)。...

JAVA IO 以及 NIO 理解

JAVA IO 以及 NIO 理解

由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍。 IO,其实意味着:数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如,用户程序发起读操作,导致“ syscall...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。