当前位置: 首页 > backend >正文

Java实现多线程

Java实现多线程的四种方式

一、继承 Thread 类

  1. 创建 MyThread 类,使其继承 Thread 类并重写 run() 方法。
  2. 创建 MyThread 类的实例对象,即创建一个新线程。
  3. 调用 start() 方法,启动线程。
public class MyThread extends Thread {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}class TestMyThread {public static void main(String[] args) {MyThread myThread1 = new MyThread();myThread1.setName("Thread-1");MyThread myThread2 = new MyThread();myThread2.setName("Thread-2");MyThread myThread3 = new MyThread();myThread3.setName("Thread-3");myThread1.start();myThread2.start();myThread3.start();}
}

运行结果如下:

// 第一次
Thread-2
Thread-1
Thread-3// 第二次
Thread-1
Thread-3
Thread-2// 第三次
Thread-1
Thread-3
Thread-2

由上可见线程执行顺序具有随机性,与编写顺序无关。

二、实现 Runnable 接口

public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}class TestMyRunnable {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();}
}

执行结果如下:

Thread-0

相比于继承 Thread 类的方法来说,实现 Runnable 接口是一个更好地选择,因为 Java 不支持多继承,但是可以实现多个接口。

有一点值得注意的是 Thread 类也实现了 Runnable 接口,这意味着构造函数 Thread(Runnable target) 不仅可以传入 Runnable 接口的对象,而且可以传入一个 Thread 类的对象,这样就可以将一个 Thread 对象中的 run() 方法交由其他线程进行调用。

三、实现 Callable 接口

public class MyCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {int a = 6;int b = 9;System.out.println("我是通过实现 Callable 接口创建的多线程,我叫" + Thread.currentThread().getName());return a + b;}
}class TestMyCallable {public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable myCallable = new MyCallable();FutureTask<Integer> futureTask = new FutureTask(myCallable);Thread thread = new Thread(futureTask);thread.start();System.out.println("返回值为:" + futureTask.get());}
}

执行结果如下:

我是通过实现 Callable 接口创建的多线程,我叫Thread-0
返回值为:15

FutureTask 类提供了一个 get() 方法用来获取 call() 方法的返回值,但需要注意的是调用这个方法会导致程序阻塞,必须要等到线程结束后才会得到返回值。

四、线程池

下章介绍

http://www.xdnf.cn/news/11261.html

相关文章:

  • windows远程登录的几种方法
  • netlink实现与使用方法详解(用户态/内核态)
  • Java实现还原微博短链接
  • MySQL四种方法实现merge into
  • IDEA插件系列(72):activate-power-mode插件——激活电源模式
  • 电脑操作系统维护10条实用建议
  • IT公司
  • C语言基本数据类型
  • 视频压缩编码标准,深入浅出,图文并茂
  • BootCamp支持软件4/5
  • 热插拔技术(番外)
  • 认识OJ(Online Judge)
  • Attribute特性定义及应用
  • 泛微e-office系统存在SQL注入漏洞
  • DFS(小白式超详细讲解以及代码讲解)
  • webpack之『使用横幅 Plugin』
  • ColorImpact v2.8.1.378 汉化注册版
  • libnet的使用详解
  • 高瓴张磊入籍新加坡,这代表了什么?
  • 各种Java加密算法-非对称加密
  • Ubuntu 12.04 常用软件
  • 在32位机器上实现64位数的除法
  • OpenCore黑苹果引导配置说明第九版-基于OpenCore-0.6.2-10-06-正式版
  • 免费收录网站搜索引擎登录口大全
  • Linux主机文件777,755,644权限详解
  • 启动应用程序出现COMDLG32.OCX找不到问题解决
  • Perl中的正则表达式
  • 什么是组态、组态的应用场景介绍
  • 4种吃子跳棋
  • 微信小程序自动化测试—自定义测试(Minium)