博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建线程的三种方式
阅读量:6828 次
发布时间:2019-06-26

本文共 3559 字,大约阅读时间需要 11 分钟。

1、继承Thread类创建线程

1 package concurrent; 2  3 /** 4  * @author zsh 5  * @site qqzsh.top 6  * @company wlgzs 7  * @create 2019-05-01 15:05 8  * @Description 创建线程的三种方式 9  * 1、继承Thread类创建线程10  * (1) 定义Thread的子类,并重写该类的run方法,该run方法的方法体就代表了线程11  * 要完成的任务。因此把run()方法称为执行体。12  * (2) 创建Thread子类的实例,即创建了该线程对象。13  * (3) 调用线程对象的start()方法来启动该线程。14  */15 public class FirstThreadTest extends Thread {16     int i = 0;17 18     @Override19     public void run() {20         for (; i < 100; i++) {21             System.out.println(getName()+" "+i);22         }23     }24 25     public static void main(String[] args) {26         for (int i = 0; i < 100; i++) {27             System.out.println(Thread.currentThread().getName()+":"+i);28             if (i == 20){29                 new FirstThreadTest().start();30                 new FirstThreadTest().start();31             }32         }33     }34 }

2、实现Runnable接口创建线程类

1 package concurrent; 2  3 /** 4  * @author zsh 5  * @site www.qqzsh.top 6  * @company wlgzs 7  * @create 2019-05-04 9:59 8  * @description 创建线程的三种方式 9  * 2、实现Runnable接口创建线程类10  * (1) 定义runnable接口的实现类,并重写该接口的run方法,该run方法的方法体同样11  * 是该线程的执行体。12  * (2) 创建Runnable实现类的实例,并依次实例作为Thread得到target来创建Thread对象,13  * 该Thread对象才是真正的线程对象。14  * (3) 调用线程对象的start()方法来启动线程。15  */16 public class RunnableThreadTest implements  Runnable{17     private int i;18 19     @Override20     public void run() {21         for (i = 0; i < 100; i++) {22             System.out.println(Thread.currentThread().getName()+" "+i);23         }24     }25 26     public static void main(String[] args) {27         for (int i = 0; i < 100; i++) {28             System.out.println(Thread.currentThread().getName()+":"+i);29             if (i == 20){30                 RunnableThreadTest rtt = new RunnableThreadTest();31                 new Thread(rtt,"新线程1").start();32                 new Thread(rtt,"新线程2").start();33             }34         }35     }36 }

3、通过Callable和Future创建线程

1 package concurrent; 2  3 import java.util.concurrent.Callable; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.FutureTask; 6  7 /** 8  * @author zsh 9  * @site www.qqzsh.top10  * @company wlgzs11  * @create 2019-05-04 10:3512  * @description 创建线程的三种方式13  * 3、通过Callable和Future创建线程14  * (1) 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,15  * 并且有返回值。16  * (2) 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask17  * 对象封装了该Callable对象的call()方法的返回值。18  * (3) 使用FutureTask对象作为Thread对象的target创建并启动新线程。19  * (4) 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。20  */21 public class CallableThreadTest implements Callable
{22 23 @Override24 public Integer call() throws Exception {25 int i = 0;26 for (;i<100;i++){27 System.out.println(Thread.currentThread().getName()+" "+i);28 }29 return i;30 }31 32 public static void main(String[] args) {33 CallableThreadTest ctt = new CallableThreadTest();34 FutureTask
ft = new FutureTask<>(ctt);35 for (int i = 0; i < 100; i++) {36 System.out.println(Thread.currentThread().getName()+" 的循环变量i的值为;"+i);37 if (i == 20){38 new Thread(ft,"有返回的线程").start();39 }40 }41 try {42 System.out.println("子线程的返回值为"+ft.get());43 } catch (InterruptedException e) {44 e.printStackTrace();45 } catch (ExecutionException e) {46 e.printStackTrace();47 }48 }49 }

转载于:https://www.cnblogs.com/zsh-blogs/p/10808854.html

你可能感兴趣的文章
Cloneable接口和Object的clone()方法
查看>>
[saiku] 连接 mondrain 数据源出错-空指针错误
查看>>
【转发】未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。...
查看>>
ORACLE和SQL SERVER的数据同步常用方法
查看>>
easyui 入门
查看>>
KMP算法之从next[]到nextVal[] (转)
查看>>
JAVA操作properties文件
查看>>
GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
查看>>
自执行函数的一些总结
查看>>
Lintcode: Add Binary
查看>>
人大、上财、复旦、上交四校2013年应届金融硕士就业去向
查看>>
技能UP:SAP OBYC自动记账的实例说明(含value String应用说明)
查看>>
[转]【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
查看>>
Cts框架解析(8)-IBuildProvider
查看>>
Tomcat 项目部署方式
查看>>
微软收购Xamarin,你怎么看?
查看>>
[caffe]深度学习之图像分类模型AlexNet解读
查看>>
HTTPS科普扫盲帖
查看>>
[na]那些OVER的封装(pppoe/ppp/ipsec)
查看>>
C# 导出Excel的示例(转载)
查看>>