java 多线程的三种写法
▌多线程是什么
运行一个程序叫做一个线程,运行过程中时处理多个任务,这些任务叫做线程(比如同时播放画面和声音)
注:真正的多线程需要多核CPU同时处理多个线程,单核的是伪多线程(单核同一时间只能处理一个线程,但是线程之间切换很多,毫秒级,所以看起来像是在同时处理)
▌一、继承类Thread
- 创建一个类
TestThread
- 继承父类
Thread
- 重写方法
Run
- new对象
TestThread
- 开启多个线程
对象名.start()
public class TestThread extends Thread {@Overridepublic void run(){//输出当前线程的名字 System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {//创建三个线程TestThread t1 = new TestThread();TestThread t2 = new TestThread();TestThread t3 = new TestThread();//线程开始t1.start();t2.start();t3.start();}
}
结果如下
<!---->
Thread-0
Thread-2
Thread-1Process finished with exit code 0
//从结果可以看出,这3个线程不是按照顺序依次执行的
▌二、实现接口Rubbable
- 创建一个类
TestRunnable
- 实现接口
Runnable
- 重写方法
Run
- new对象
TestRunnable
- 开启多个线程
new Thread(对象名,线程名).start()
完整代码如下
public class TestRunnable implements Runnable {//重写run方法public void run() {System.out.println(Thread.currentThread().getName());}//测试public static void main(String[] args) {TestRunnable t = new TestRunnable();//线程开启new Thread(t).start();new Thread(t).start();new Thread(t).start();}
}
运行结果如下:
<!---->
Thread-0
Thread-2
Thread-1Process finished with exit code 0//从结果可以看出,这3个线程不是按照顺序依次执行的
▌三、实现接口Callable
这个接口使用了线程池
- 写一个类
TestCallable
实现接口Callable
- 重写方法
call()
,方法类型自定义(可以是Boolean或Integer,但是不能是void)要有返回值return - 创建new多个
TestCallable
类 - 开启线程池
Executors.newFixedThreadPool(线程数)
- 线程执行
- 关闭线程池
完整代码如下
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class TestCallable implements Callable {public Boolean call() throws Exception {System.out.println(Thread.currentThread().getName());return true;}public static void main(String[] args) {TestCallable t1 = new TestCallable();TestCallable t2 = new TestCallable();TestCallable t3 = new TestCallable();TestCallable t4 = new TestCallable();//创建任务的线程池,任务数>=我们要跑的线程ExecutorService ser = Executors.newFixedThreadPool(4);//线程执行ser.submit(t1);ser.submit(t2);ser.submit(t3);ser.submit(t4);//关闭线程ser.shutdown();}
}
运行结果如下
<!---->
pool-1-thread-1
pool-1-thread-3
pool-1-thread-2
pool-1-thread-4Process finished with exit code 0//从结果可以看出,这几个线程不是按照顺序依次执行的
使用线程池的好处:
降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行。
提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,监控和调优。
java 多线程的三种写法相关推荐
- Java多线程的几种写法
Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口: 1.继承Thread方法 class TestThread ...
- Java多线程的三种实现方式(重点看Collable接口实现方式)
1.通过继承Thread类来实现多线程 在继承Thread类之后,一定要重写类的run方法,在run方法中的就是线程执行体,在run方法中,直接使用this可以获取当前线程,直接调用getName() ...
- Java多线程【三种实现方法】
java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...
- java 冒泡排序的三种写法_冒泡排序的三种实现(Java)
冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后. 设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换. (2)这样 ...
- java中synchronized的三种写法详解
预备知识 首先,我们得知道在java中存在三种变量: 实例变量 ==> 存在于堆中 静态变量 ==> 存在于方法区中 局部变量 ==> 存在于栈中 然后,我们得明白,合适会发生高并发 ...
- java多线程w3c_Java创建多线程的三种方式
前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...
- java中实现多线程的三种方式
java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: 继承类T ...
- java实现线程三种方式_详解三种java实现多线程的方式
java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread ...
- 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制
什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...
最新文章
- 超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图
- SQL*Plus中替换变量与定义变量
- 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
- 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现
- A Story of One Country (Hard)(中途相遇法/启发式分裂)
- root 链接ftp
- Redis使用单线程却快到飞起的原因
- 修复VMware 下Ubuntu启动不了问题
- sqlite的交叉编译及移植 -转
- 2021-09-06单纯形计算方法(
- 发动机压缩比怎么计算公式_精准的发动机压缩比计算方法与流程
- log日志中输出log所在类,方法和行数
- android 蓝牙地址连接打印机,android 连接蓝牙打印机 BluetoothAdapter
- vue做移动端适配最佳解决方案,亲测有效
- SpringBoot+Vue实现前后端分离的教务评教系统
- 机器学习中的隐变量和隐变量模型
- 图像仿射变换及图像扭曲(Image Warping)
- 开放经济的宏观经济学:基本概念 - 异想天开
- 友邦千盛春雨计划:为每个孤寡老人点亮心中微心愿
- PHP使用vld扩展查看opcodes