四种多线程方式

Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。

其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。

方式一:继承Thread类

  重写run()方法,调用start()方法执行。

  需要注意的是:为什么多线程的启动不是调用run()方法,而是调用start()方法?

在Java开发中有一门JNI(Java Native Interface)技术,这门技术的特点,使用Java调用本机操作系统的函数,但是这个技术不能离开特定的操作系统。

如果线程想要执行,需要操作系统分配资源。所以此操作严格来讲需要JVM根据不同的操作系统来实现的。

  start()方法中,使用了native关键字修饰了方法,而native关键字时根据不同的操作系统分配不同的资源。

  start()方法,不仅仅要启动多线程执行的代码,还需要根据不同的操作系统来分配资源

 1 package test;
 2
 3 public class MyThread  {
 4     public static void main(String[] args) {
 5         Test t1 = new Test("one");
 6         Test t2 = new Test("two");
 7         Test t3 = new Test("three");
 8         /**
 9          * 调用Thread类中的start方法,才能进行多线程的操作,而不是run方法
10          * start()方法不仅仅启动多线程代码的执行,还需要根据不同的操作系统分配资源
11          */
12         try {//调用Thread类中的sleep方法,让线程等待指定的一段时间
13             Thread.sleep(1000);
14         } catch (InterruptedException e) {
15             e.printStackTrace();
16         }
17         t1.start();
18         t2.start();
19         t3.start();
20     }
21 }
22
23 /**
24  * 继承线程类Thread,重写run()方法,在run方法中实现需要进行的数据操作
25  * @author Administrator
26  *
27  */
28 class Test extends Thread{
29
30     private String name;
31
32     public Test(String name) {
33         this.name=name;
34     }
35     @Override
36     public void run() {//需要进行多进程的操作
37         for (int i = 0; i < 100; i++) {
38             System.out.println(name+"===>"+i);
39         }
40     }
41 }

方式二:实现Runnable接口

    实现run方法,将Runnable对象作为参数放入到Thread构造方法中,在调用start()方法。

 1 package test;
 2 /**
 3  * 测试Runnable接口
 4  * @author Administrator
 5  *
 6  */
 7 public class MyRunnable {
 8     public static void main(String[] args) {
 9         Demo mr1 = new Demo("A");
10         Demo mr2 = new Demo("B");
11         Demo mr3 = new Demo("C");
12         //将该对象作为参数,传入到Thread类中,在调用start()方法。
13         new Thread(mr1).start();
14         new Thread(mr2).start();
15         new Thread(mr3).start();
16     }
17 }
18
19 /**
20  * 实现Runnable接口,实现多线程
21  * @author Administrator
22  *
23  */
24 class Demo implements Runnable {
25
26     private String name;
27
28     public Demo(String name) {
29         this.name = name;
30     }
31
32     @Override
33     public void run() {
34         for (int i = 0; i < 300; i++) {
35             System.out.println(name + "==>" + i);
36         }
37     }
38
39 }

方式三:实现Callable接口通过FutureTask包装器来创建Thread线程

待续。。。

方式四:使用ExecutorService、Callable、Future实现有返回结果的线程

待续。。。

原文地址:https://www.cnblogs.com/in-the-game-of-thrones/p/11216125.html

时间: 2024-11-07 10:16:56

四种多线程方式的相关文章

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4

mysql的四种启动方式

mysql的四种启动方式: 1.mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --defaults-file=/etc/my.cnf or mysql -S /tmp/mysql.sock 2.mysqld_safe 启动mysql服务器:./mysqld_safe --defaults-file=/etc/my.cnf --user=root & 客户端连接: mysql --de

CSS的四种引入方式

CSS的引入方式最常用的有三种, 第一:在head部分加入<link  rel="stylesheet" type="text/css" href="my.css"/>,引入外部的CSS文件. 这种方法可以说是现在占统治地位的引入方法.如同IE与浏览器.这也是最能体现CSS特点的方法:最能体现DIV+CSS中的内容与显示分离的思想,也最易改版维护,代码看起来也是最美观的一种. 第二:在head部分加入<style type=&q

同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:   同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事.   例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个

[转][Android]Android数据的四种存储方式

android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuilder public class SQLiteQueryBuilderextends Object This is a convience class that helps build SQL queries to be sent to SQLiteDatabase objects. 构造方法摘要

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Pro

CSS四种设置方式

上面这张思维导图已经大概的讲明白了四种设置方式的不同点,下面就细入说明一下各自的用法和注意点. 1.嵌入样式表 <html> <head> <title>CSS四种设置方式</title> </head> <body> <p style="color:red;font-size:2cm;background-color:gray; border:2px solid blue">内联样式表</p&g

msyql四种启动方式

1 mysql默认启动配置文件my.cnf顺序 第一步:/etc/my.cnf 第二步:/etc/mysql/my.cnf 第三步:/usr/local/mysql/etc/my.cnf 第四步:~/.my.cnf 可以通过命令查看加载顺序: [[email protected] ~]# which mysqld /usr/local/mysql/bin/mysqld [[email protected] ~]# /usr/local/mysql/bin/mysqld --verbose --h

while的四种使用方式

方式一:计数器控制while的循环 #!/bin/bashsum=0i=0while (( i <= 100 ))do        let "sum=sum+$i"        let "i=i+2"doneecho $sum 方式二:结束标记控制循环 read -p "please input a num[1-10] " num2while [[ "$num" != 5 ]]do        if [ "