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

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

Java多线程的实现方式:

1.继承Thread类,重写run()方法。

/** * @author suwan * @date 2019/6/14 */public class ThreadTest extends Thread{    private String threadName;    public ThreadTest(String name) {        this.threadName = name;       System.out.println("创建线程:"+name);    }    @Override    public void run() {        for (int i =0 ;i<10;i++){            System.out.println(threadName+" i="+i);        }    }}
/** * @author suwan * @date 2019/6/14 */public class Test {    public static void main(String[] args){        Thread thread = new ThreadTest("线程1");        Thread thread1 = new ThreadTest("线程2");        thread.start();        thread1.start();    }}
输出:创建线程:线程1创建线程:线程2线程1 i=0线程1 i=1线程1 i=2线程1 i=3线程1 i=4线程1 i=5线程1 i=6线程1 i=7线程1 i=8线程2 i=0线程1 i=9线程2 i=1线程2 i=2线程2 i=3线程2 i=4线程2 i=5线程2 i=6线程2 i=7线程2 i=8线程2 i=9
View Code

2.实现runable接口:

/** * @author suwan * @date 2019/6/14 */public class RunableTest implements Runnable {    @Override    public void run() {        for (int i =0 ;i<10;i++){            System.out.println(Thread.currentThread().getName()+" i="+i);        }    }}
/** * @author suwan * @date 2019/6/14 */public class Test {  public static void main(String[] args){       RunableTest runableTest = new RunableTest();     Thread thread = new Thread(runableTest);     Thread thread1 = new Thread(runableTest);     thread.start();     thread1.start();  }}
输出:Thread-1 i=0Thread-1 i=1Thread-0 i=0Thread-0 i=1Thread-0 i=2Thread-1 i=2Thread-1 i=3Thread-1 i=4Thread-0 i=3Thread-1 i=5Thread-0 i=4Thread-1 i=6Thread-1 i=7Thread-1 i=8Thread-0 i=5Thread-1 i=9Thread-0 i=6Thread-0 i=7Thread-0 i=8Thread-0 i=9
View Code

3.通过Callable和FutureTask:

import java.util.concurrent.Callable;/** * @author suwan * @date 2019/6/14 */public class CallableTest implements Callable
{ @Override public Integer call() throws Exception { int i =0; for (;i<5;i++){ System.out.println(Thread.currentThread().getName()+" i="+i); } return i; }}
import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @author suwan * @date 2019/6/14 */public class Test {  public static void main(String[] args){      CallableTest callableTest = new CallableTest();      FutureTask
futureTask = new FutureTask<>(callableTest); new Thread(futureTask,"线程:").start(); try { System.out.println("线程运算后结果:i= "+futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}
输出:线程: i=0线程: i=1线程: i=2线程: i=3线程: i=4线程运算后结果:i= 5
View Code

涉及知识点:

1.线程对象调用start()方法之后,就说明线程进入就绪状态,等待JVM里的线程调度器的调度。

2.就绪状态下的线程如果获得了cpu资源,就可以执行run(),这时线程便处于运行状态。当线程执行sleep()之后便会进入睡眠,在睡眠结束后就会重新进入就绪状态。

三种方法的比较:

1.继承Thread:由于已经继承了Thread类,就不能再继承别的类了。

2.实现Runable:避免单继承,没有返回值。

3.实现Callable:避免单继承,有返回值。

 

转载于:https://www.cnblogs.com/suwan1125/p/11024698.html

你可能感兴趣的文章
程序员求职成功路(3)
查看>>
Winform 打印PDF顺序混乱,获取打印队列
查看>>
django 快速搭建blog
查看>>
datetime.timedelta类
查看>>
SQL Server,MySQL,Oracle三者的区别
查看>>
[K/3Cloud] 在设计时复制已有表单菜单或菜单项快速建立菜单
查看>>
矩阵快速幂总结
查看>>
[spring] Ioc 基础
查看>>
关于DataTables一些小结
查看>>
win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
查看>>
Hibernate的基本配置
查看>>
Python 3.5 安装geohash库后import geohash失败
查看>>
总结100个英文邮件常用例句让你写作无忧
查看>>
css3--之backface-visibility
查看>>
软件需求分析之猫咪记单词
查看>>
good vs evil
查看>>
算法28-----范围求和
查看>>
基于V4L2的视频驱动开发(1)
查看>>
zoj 1008
查看>>
VC++ CArchive及简单的文件操作方法
查看>>