关键词:
1、继承Thread类,新建一个当前类对象,并且运行其start()方法
1 package com.xiaostudy.thread; 2 3 /** 4 * @desc 第一种开启线程的方式 5 * @author xiaostudy 6 * 7 */ 8 public class Demo1_Thread extends Thread { 9 10 public void run() { 11 for (int i = 0; i < 10; i++) { 12 System.out.println(i + " run()..."); 13 } 14 } 15 16 public static void main(String[] args) { 17 Demo1_Thread demo = new Demo1_Thread(); 18 demo.start(); 19 for (int i = 0; i < 10; i++) { 20 System.out.println(i + " main()..."); 21 } 22 } 23 24 }
上面这里就是当前类的一个线程和main线程一起运行
2、实现Runnable接口,然后新建当前类对象,接着新建Thread对象时把当前类对象传进去,最后运行Thread对象的start()方法
1 package com.xiaostudy.thread; 2 3 /** 4 * @desc 第二种开启线程的方式 5 * @author xiaostudy 6 * 7 */ 8 public class Demo2_Thread implements Runnable { 9 10 public void run() { 11 for (int i = 0; i < 10; i++) { 12 System.out.println(i + " run()..."); 13 } 14 } 15 16 public static void main(String[] args) { 17 Demo2_Thread demo = new Demo2_Thread(); 18 Thread thread = new Thread(demo); 19 thread.start(); 20 for (int i = 0; i < 10; i++) { 21 System.out.println(i + " main()..."); 22 } 23 } 24 25 }
分析:
从Thread的有参构造方法进去
当前类传进去,进入到Thread的init()方法
再跟进去
下面截图问题,分开两个,看行号。就把当前类赋值给了Thread的target属性
再回过头来看Thread对象的run()方法,因为当Thread对象的start()方法调用时,是执行Thread对象的run()方法(这里就不深入分析)
这里的target的值就是当前类对象,所以最后还是执行了当前类对象的run()方法
3、实现Callable接口,新建当前类对象,在新建FutureTask类对象时传入当前类对象,接着新建Thread类对象时传入FutureTask类对象,最后运行Thread对象的start()方法
package com.xiaostudy.thread; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * @desc 第三种开启线程的方式 * @author xiaostudy * */ public class Demo3_Thread implements Callable { public static void main(String[] args) { Callable callable = new Demo3_Thread(); FutureTask futureTask = new FutureTask(callable); Thread thread = new Thread(futureTask); thread.start(); for (int i = 0; i < 10; i++) { System.out.println(i + " main()..."); } } public Object call() throws Exception { for (int i = 0; i < 10; i++) { System.out.println(i + " call()..."); } return null; } }
分析:
同样从Thread的有参构造方法进去
同样也是跟第二种方法一样
那么,就看Runnable接口和FutureTask类的关系。从下面的图看出FutureTask类是Runnable接口的继承接口的实现类。
接着看看FutureTask的有参构造
从下图可以看出,FutureTask的有参构造,把当前类对象传给了FutureTask的callable属性
那么当Thread执行start()方法时,就是执行FutureTask的run()方法,从下面图看到,最后就是执行了当前类的call()方法
java多线程实现的三种方式(代码片段)
文章目录实现多线程方式一:继承Thread类方法介绍实现步骤代码演示思考问题实现多线程方式二:实现Runnable接口Thread构造方法实现步骤代码演示实现多线程方式三:实现Callable接口方法介绍实现步骤代码演示三种实现方式... 查看详情
java多线程实现的三种方式
JAVA多线程实现的三种方式Java中继承thread类与实现Runnable接口的区别 查看详情
java-多线程-创建线程的三种方式
JAVA-多线程-创建线程的三种方式并发:同一时间只有一条指令在执行,多个进程的指令被快速轮换执行。并行:同一时间有多条指令在多个处理器上运行。进程:每个运行中的程序就是一个进程。线程:线程(Thread)也被称为轻... 查看详情
java多线程的三种实现方式
今天简单说一下Java三种多线程实现方式和区别,主要有实现Runnable、Callable和继承Thread三种方式。实现Runnable的方式这种方式比较常用,当我们的线程类有继承其他的类的情况下(Java不支持类多继承),并且线程任务不需要返回... 查看详情
ajpfx关于java多线程实现的三种方式
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。 1、继承Thread类实现多线程... 查看详情
java中创建线程的三种方式
JAVA中创建线程的三种方式1继承Thread类重写run方法,使用start()开启线程,如此,就可以同时做多件事情publicclassMyThreadextendsThread{@Overridepublicvoidrun(){for(inti=0;i<10;i++){try{sleep(1000);}catch(InterruptedExceptione){e.printStackT 查看详情
java多线程实现的三种方法,附两个线程执行不同的输出
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多... 查看详情
java——多线程高并发系列之创建多线程的三种方式(threadrunnablecallable)(代码片段)
...)方法)写在前面历时一个星期,终于整完了Java多线程高并发这个系 查看详情
大数据必学java基础(七十六):创建线程的三种方式(代码片段)
文章目录创建线程的三种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口创建线程的三种方式一、继承Thread类在学习多线程之前,以前的代码是单线程的吗?不是,以前也是有三个线程同时执行的。现在... 查看详情
创建线程的三种方式
1、继承Thread类,重写run方法,调用start方法启动线程;packageThread;//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程//总结:注意,线程开启不一定立即执行,由CPU调度执行publicclassthreadDemo1extendsThread@Overridepublicvoi... 查看详情
java多线程《ii》—启动线程的三种方式和源码分析(代码片段)
...家见面啦,总算挑出点时间写文章了,写一下多线程吧,后面还会继续更新,文章内容若有问题请指出,万分感谢!好啦,下面就开始今天的课程吧!1、继承Th 查看详情
实现多线程的三种方式
p.MsoNormal,li.MsoNormal,div.MsoNormal{margin:0cm;margin-bottom:.0001pt;text-align:justify;font-size:10.5pt;font-family:"Calibri","sans-serif"}h1{margin-right:0cm;margin-left:0cm;font-size:24.0pt;font 查看详情
java多线程
Java多线程实现的三种方式Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、... 查看详情
java创建线程的三种方式
1.继承Runnable接口packagetest;classRunnableDemoimplementsRunnable{privateThreadt;privateStringthreadName;RunnableDemo(Stringname){threadName=name;System.out.println("Creating"+name);}publicvoidrun(){Syste 查看详情
多线程
JAVA多线程实现的三种方式Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、... 查看详情
49多线程创建的三种方式之继承thread类(代码片段)
继承Thread类创建线程在java里面,开发者可以创建线程,这样在程序执行过程中,如果CPU空闲了,就会执行线程中的内容。使用Thread创建线程的步骤:1.自定义一个类,继承java.lang包下的Thread类2.重写run方法3.将要在线程中执行的... 查看详情
java创建线程的三种主要方式
Java创建线程的主要方式一、继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务。创建后的子类通过调用start()方法即可执行线程方法。 通过继承Thread实现的线程类,多个线程间无法共享线程类的实... 查看详情
多线程基础二(线程的启动终止,线程面临的三种问题)(代码片段)
一、线程的启动、终止方式 启动: startnative(调用外部接口启动) 终止: stop(类似kill,暴力终止) interrupt中断的方式通过指令的方式volatilebooleanstop=false;publicclassInterruptDemoprivatestaticinti;publicstat 查看详情