▌多线程是什么

运行一个程序叫做一个线程,运行过程中时处理多个任务,这些任务叫做线程(比如同时播放画面和声音)
注:真正的多线程需要多核CPU同时处理多个线程,单核的是伪多线程(单核同一时间只能处理一个线程,但是线程之间切换很多,毫秒级,所以看起来像是在同时处理)

▌一、继承类Thread
  1. 创建一个类TestThread
  2. 继承父类Thread
  3. 重写方法Run
  4. new对象TestThread
  5. 开启多个线程对象名.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
  1. 创建一个类TestRunnable
  2. 实现接口Runnable
  3. 重写方法Run
  4. new对象TestRunnable
  5. 开启多个线程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

这个接口使用了线程池

  1. 写一个类TestCallable实现接口Callable
  2. 重写方法call(),方法类型自定义(可以是Boolean或Integer,但是不能是void)要有返回值return
  3. 创建new多个TestCallable
  4. 开启线程池Executors.newFixedThreadPool(线程数)
  5. 线程执行
  6. 关闭线程池

完整代码如下


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 多线程的三种写法相关推荐

  1. Java多线程的几种写法

    Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口: 1.继承Thread方法 class TestThread ...

  2. Java多线程的三种实现方式(重点看Collable接口实现方式)

    1.通过继承Thread类来实现多线程 在继承Thread类之后,一定要重写类的run方法,在run方法中的就是线程执行体,在run方法中,直接使用this可以获取当前线程,直接调用getName() ...

  3. Java多线程【三种实现方法】

    java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...

  4. java 冒泡排序的三种写法_冒泡排序的三种实现(Java)

    冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后. 设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换. (2)这样 ...

  5. java中synchronized的三种写法详解

    预备知识 首先,我们得知道在java中存在三种变量: 实例变量 ==> 存在于堆中 静态变量 ==> 存在于方法区中 局部变量 ==> 存在于栈中 然后,我们得明白,合适会发生高并发 ...

  6. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  7. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

  8. java实现线程三种方式_详解三种java实现多线程的方式

    java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread ...

  9. 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制

    什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...

最新文章

  1. 超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图
  2. SQL*Plus中替换变量与定义变量
  3. 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
  4. 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现
  5. A Story of One Country (Hard)(中途相遇法/启发式分裂)
  6. root 链接ftp
  7. Redis使用单线程却快到飞起的原因
  8. 修复VMware 下Ubuntu启动不了问题
  9. sqlite的交叉编译及移植 -转
  10. 2021-09-06单纯形计算方法(
  11. 发动机压缩比怎么计算公式_精准的发动机压缩比计算方法与流程
  12. log日志中输出log所在类,方法和行数
  13. android 蓝牙地址连接打印机,android 连接蓝牙打印机 BluetoothAdapter
  14. vue做移动端适配最佳解决方案,亲测有效
  15. SpringBoot+Vue实现前后端分离的教务评教系统
  16. 机器学习中的隐变量和隐变量模型
  17. 图像仿射变换及图像扭曲(Image Warping)
  18. 开放经济的宏观经济学:基本概念 - 异想天开
  19. 友邦千盛春雨计划:为每个孤寡老人点亮心中微心愿
  20. PHP使用vld扩展查看opcodes

热门文章

  1. 极限类题之积分上限的函数的极限
  2. 基于wifi无线PLC远程控制实现io开关量信号远程采集传输技术
  3. sshd_config配置解析
  4. 图形化编程与python的区别_计算机编程启蒙为什么要选图形化编程和python
  5. 双引擎强悍!QQ电脑管家4.6 Beta1实测
  6. MT7688/MT7628-GPIO使用
  7. 【蓝桥杯】Python字符串处理和应用
  8. 关于C++ 虚函数 子类和父类 一点小的总结
  9. 【BZOJ2152】聪聪可可 树分治
  10. java后端返回二进制图片 前端进行展示 详解