Java多线程不会?一文解决——

方法一

  1. 新建类如MyThread继承Thread类
  2. 重写run()方法
  3. 再通过new MyThread类来新建线程
  4. 通过start方法启动新线程

案例:

class MyThread extends Thread {public MyThread(String name) {super(name);}@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(this.getName() + " " + i );}}}主类:MyThread myThread1 = new MyThread("Thread-1");MyThread myThread2 = new MyThread("Thread-2");MyThread myThread3 = new MyThread("Thread-3");myThread1.start();myThread2.start();myThread3.start();

常用方法

  • static void sleep(T):让当前线程睡T毫秒
  • static void yield():当前线程从运行变为就绪状态,重新争夺cpu
  • void run():执行线程中run()方法(在当前线程中执行)
  • void start():开启一个新的线程执行run()方法
  • void setName():设置这个线程的名称
  • String getName():获取当前线程的名称
  • void interrupt():中断执行的子线程
  • void join():等该线程执行完后,再执行当前线程

例:

当前主线程需等待t01,t02,t03线程执行完后再执行。


方法二

  1. 创建新类MyThread实现Runnable接口
  2. 实现接口中的run方法
  3. 创建MyThread对象,再新建Thread对象,将MyThread对象作为构造方法的参数传入Thread
  4. 通过start方法启动新的线程

案例:

class MyThread implements Runnable {@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName() + " " + i );}}
}
主类main方法中MyThread myThread1 = new MyThread();Thread myThread2 = new Thread(myThread1);Thread myThread3 = new Thread(myThread1);myThread2.start();myThread3.start();

方法三

  1. 新建类MyThread实现Callable接口
  2. 实现接口中的call方法(有返回值)
  3. 创建MyThread对象,创建FutureTask对象将MyThread对象当作构造方法参数传入
  4. 创建Thread对象将FutureTask对象当构造方法参数传入(类似方法二第三步)
  5. 通过start方法启动新线程
  6. 通过FutureTask对象get方法获取返回结果

案例:

class MyThread implements Callable{@Overridepublic Object call() throws Exception {for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName() + " " + i );}Thread.sleep(5000);return 10+20;}
}main方法中:FutureTask futureTask = new FutureTask(new MyThread());Thread thread = new Thread(futureTask);thread.start();Object result = futureTask.get();System.out.println("执行结果:"+result);

实际过程中会出现多线程相关问题,比如两个线程同时操控一个实例变量或共享变量,可能会存在数据不一致等问题。


编程模型

同步编程模型:线程一执行必须等待线程二执行结束,或相反,两个线程发生了等待关系。

异步编程模型:线程一和线程二同时执行。

解决方法

方法一

synchronized(锁的内容,通常为全局唯一例如类main.class){

执行的内容

}

方法二

通过Lock lock = new ReentrantLock()对象来上锁

lock.lock();//上锁

执行的内容

lock.unlock();//解锁

守护线程

一般是一个死循环,所有用户结束,守护线程也就结束。

开启方法

void setDaemon(true);

方法四

通过wait()和notify(),notifyAll()方法等待和唤醒线程。


线程池

多线程运行时,系统不断创建和销毁新的线程,成本非常高,使用线程池就是最好的选择。

创建

ExecutorService threadPoll = Executors.newCachedThreadPool();

threadPoll.execute(对象):线程池指派一个线程执行该对象run方法。

关闭线程池

threadPoll.shutdown();


多把锁

创建

CountDownLatch countDownLatch = new CountDownLatch(锁的数量);

锁数量减少

countDownLatch.countDown(); //锁的数量减一

等待

countDownLatch.await():等待子线程执行完再执行(锁的数量为0)


感谢观看——

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react dangerouslySetInnerHTML将html字符串以变量方式插入页面,点击后出现编辑状态

1.插入变量 出现以下编辑状态 2.解决 给展示富文本的标签添加css样式 pointerEvents: none

那些年背过的面试题——MySQL篇

本文是技术人面试系列 MySQL 篇&#xff0c;面试中关于 MySQL 都需要了解哪些基础&#xff1f;一文带你详细了解&#xff0c;欢迎收藏&#xff01; WhyMysql&#xff1f; NoSQL 数据库四大家族 列存储 Hbase K-V 存储 Redis 图像存储 Neo4j 文档存储 MongoDB 云存储 OSS …

AI大模型的智能心脏:向量数据库的崛起

在人工智能的飞速发展中,一个关键技术正悄然成为AI大模型的智能心脏——向量数据库。它不仅是数据存储和管理的革命性工具,更是AI技术突破的核心。随着AI大模型在各个领域的广泛应用,向量数据库的重要性日益凸显。 01 技术突破:向量数据库的内在力量 向量数据库以其快速检索…

RNN、LSTM与GRU循环神经网络的深度探索与实战

循环神经网络RNN、LSTM、GRU 一、引言1.1 序列数据的迷宫探索者&#xff1a;循环神经网络&#xff08;RNN&#xff09;概览1.2 深度探索的阶梯&#xff1a;LSTM与GRU的崛起1.3 撰写本博客的目的与意义 二、循环神经网络&#xff08;RNN&#xff09;基础2.1 定义与原理2.1.1 RNN…

【Python】组合数据类型:序列,列表,元组,字典,集合

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言组合数据类型序列类型序列常见的操作符列表列表操作len()append()insert()remove()index()sort()reverse()count() 元组三种序列类型的区别 集合类型四种操作符集合setfrozens…

【CSS in Depth 2精译】2.5 无单位的数值与行高

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高 ✔️2.6 自定义属性2.7 本章小结 2.5 无单位的数值与行高 有些属性允许使用无单位的数值&#xff08;unitless value…

【数据结构与算法】快速排序挖坑法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

前端面试题16(跨域问题)

跨域问题源于浏览器的同源策略&#xff08;Same-origin policy&#xff09;&#xff0c;这一策略限制了来自不同源的“写”操作&#xff08;比如更新、删除数据等&#xff09;&#xff0c;同时也限制了读操作。当一个网页尝试请求与自身来源不同的资源时&#xff0c;浏览器会阻…

Python实现ABC人工蜂群优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化…

PD虚拟机不能复制Mac的文件怎么回事 PD虚拟机不能复制Mac的文件怎么办 Parallels Desktop怎么用

PD虚拟机不仅能提供跨系统协作的服务&#xff0c;还能进行虚拟机系统与原生系统间的文件共享、文本复制、文件复制等操作&#xff0c;让系统间的资源可以科学利用。但在实际操作过程中&#xff0c;PD虚拟机不能复制Mac的文件怎么回事&#xff1f;PD虚拟机不能复制Mac的文件怎么…

linux centos7.9 安装mysql5.7;root设置客户端登录、配置并发、表名大小写敏感等

查看centos版本 cat /etc/centos-releasecentos版本为7.9 查看是否已安装mariadb,安装了需要先删除 1.查看是否安装了mariadb和mysql,安装了需要先删除 mariadb是mysql的一个分支,但要安装mysql需要删除它 执行rpm -qa|grep mariadb,查看mariadb情况 查找到有就删除 执行…

Day59 动态规划part12

LC115不同的子序列&#xff08;未掌握&#xff09; 递推公式与LC392类似&#xff0c;但是初始化略有不同 LC392的dp数组含义为相同字符个数而本体的dp数组含义为出现的次数&#xff0c;因此dp[i][0]1 两种情况 s[i-1]t[j-1] dp[i][j] dp[i-1][j-1]dp[i][j] dp[i-1][j] s[…

Kubernetes集群性能测试之kubemark集群搭建

Kubernetes集群性能测试之kubemark集群搭建 Kubemark是K8s官方提供的一个对K8s集群进行性能测试的工具。它可以模拟出一个K8s cluster&#xff08;Kubemark cluster&#xff09;&#xff0c;不受资源限制&#xff0c;从而能够测试的集群规模比真实集群大的多。这个cluster中ma…

运维锅总详解系统启动流程

本文详细介绍Linux及Windows系统启动流程&#xff0c;并分析了它们启动流程的异同以及造成这种异同的原因。希望本文对您理解系统的基本启动流程有所帮助&#xff01; 一、Linux系统启动流程 Linux 系统的启动流程可以分为几个主要阶段&#xff0c;从电源开启到用户登录。每个…

有一个日期(Date)类的对象和一个时间(Time)类的对象,均已指定了内容,要求一次输出其中的日期和时间

可以使用友元成员函数。在本例中除了介绍有关友元成员函数的简单应用外&#xff0c;还将用到类的提前引用声明&#xff0c;请读者注意。编写程序&#xff1a; 运行结果&#xff1a; 程序分析&#xff1a; 在一般情况下&#xff0c;两个不同的类是互不相干的。display函…

关于Java异常机制及finally关键字的详解

异常机制(Exception) 软件程序在运行过程中&#xff0c;非常可能遇到异常问题。常见的异常&#xff1a; 1、用户输入错误 2、设备错误 3、硬件问题&#xff0c;例如打印机关掉、服务器问题 4、物理限制&#xff1a;磁盘满了 Java是采用面向对象的方式来处理异常的。 处理过程…

基于Java的水果商品销售网站

1 水果商品销售网站概述 1.1 课题简介 随着电子商务在当今社会的迅猛发展&#xff0c;水果在线销售已逐渐演变为一种极为便捷的购物方式&#xff0c;日益受到人们的青睐。本系统的设计初衷便是构建一个功能完备、用户体验友好的水果销售平台&#xff0c;致力于为用户提供优质、…

【植物大战僵尸杂交版】获取+存档插件

文章目录 一、还记得《植物大战僵尸》吗&#xff1f;二、在哪下载&#xff0c;怎么安装&#xff1f;三、杂交版如何进行存档功能概述 一、还记得《植物大战僵尸》吗&#xff1f; 最近&#xff0c;一款曾经在15年前风靡一时的经典游戏《植物大战僵尸》似乎迎来了它的"文艺复…

渐开线花键测量学习笔记分享

大家好&#xff0c;继续渐开线花键的相关内容&#xff0c;本期是渐开线花键测量相关的学习笔记分享&#xff1a; 花键检测项目有花键大径和小径检验&#xff1b;内花键齿槽宽和外花键齿厚&#xff0c;以及渐开线终止圆 和起始圆直径检测&#xff1b;齿距累计误差 、齿形误差 、…

排序算法简述(第八jiang)

目录 排序 选择排序 O(n2) 不稳定&#xff1a;48429 归并排序 O(n log n) 稳定 插入排序 O(n2) 堆排序 O(n log n) 希尔排序 O(n log2 n) 图书馆排序 O(n log n) 冒泡排序 O(n2) 优化&#xff1a; 基数排序 O(n k) 快速排序 O(n log n)【分治】 不稳定 桶排序 O(n…