您的位置:首页 >快讯 >

最新资讯:java线程的创建和管理(二)

2023-04-04 08:12:11    来源:腾讯云

四、线程同步与互斥

Java 中的线程同步和互斥机制可以防止多个线程同时访问共享资源导致数据不一致的问题。Java 中的线程同步和互斥机制有多种实现方式,包括 synchronized 关键字、Lock 接口、Semaphore 类、Condition 接口等。

synchronized 关键字

synchronized 关键字可以保证同步访问共享资源,其用法有两种:


(资料图)

修饰实例方法

在方法前加上 synchronized 关键字,保证同一时刻只有一个线程能够执行该方法。

public synchronized void method() {    // 同步代码块}
修饰代码块

在代码块前加上 synchronized 关键字,保证同一时刻只有一个线程能够执行该代码块。

public void method() {    synchronized (this) {        // 同步代码块    }}

Lock 接口

Lock 接口提供了比 synchronized 更为灵活的锁机制。Lock 接口有多个实现类,其中最常用的是 ReentrantLock 类。ReentrantLock 类实现了 Lock 接口,使用方式如下:

import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class MyRunnable implements Runnable {    private Lock lock = new ReentrantLock(); // 创建可重入锁    @Override    public void run() {        lock.lock(); // 获取锁        try {            // 同步代码块        } finally {            lock.unlock(); // 释放锁        }    }}

在该例子中,我们使用 ReentrantLock 类创建了一个可重入锁,并在 run() 方法中使用了 lock() 方法获取锁,使用了 unlock() 方法释放锁。

Semaphore 类

Semaphore 类可以控制并发线程的数量,其用法如下:

import java.util.concurrent.Semaphore;public class MyRunnable implements Runnable {    private Semaphore semaphore = new Semaphore(2); // 创建 Semaphore 对象,限制线程数量为 2    @Override    public void run() {        try {            semaphore.acquire(); // 获取许可证            // 同步代码块        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            semaphore.release(); // 释放许可证        }    }}

在该例子中,我们创建了一个 Semaphore 对象,限制线程数量为 2,然后在 run() 方法中使用了 acquire() 方法获取许可证,使用了 release() 方法释放许可证。

Condition 接口

Condition 接口可以实现线程之间的通信,其用法如下:

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class MyRunnable implements Runnable {    private Lock lock = new ReentrantLock();    private Condition condition = lock.newCondition(); // 创建条件变量    @Override    public void run() {        lock.lock();        try {            while (true) {                condition.await(); // 等待信号                // 处理信号            }        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            lock.unlock();        }    }    public void signal() {        lock.lock();        try {            condition.signal(); // 发送信号        } finally {            lock.unlock();        }    }}

在该例子中,我们使用 Lock 和 Condition 接口实现了线程之间的通信。在 run() 方法中,我们使用了 await() 方法等待信号,使用了 signal() 方法发送信号。

五、线程池

线程池是一种重用线程的机制,可以避免线程的频繁创建和销毁,提高了线程的利用率。Java 中的线程池是通过 Executor 框架实现的,包括 Executor、ExecutorService 和 ThreadPoolExecutor 三个类。

Executor

Executor 是一个接口,只定义了一个 execute(Runnable command) 方法,用于执行 Runnable 对象。

import java.util.concurrent.Executor;public class MyRunnable implements Runnable {    @Override    public void run() {        // 线程执行的代码    }}public class Test {    public static void main(String[] args) {        Executor executor = Executors.newSingleThreadExecutor(); // 创建 Executor 对象        executor.execute(new MyRunnable()); // 执行线程    }}

在该例子中,我们使用 Executors 工厂类创建了一个单线程的 Executor 对象,然后使用 execute() 方法执行了一个 MyRunnable 对象。

ExecutorService

ExecutorService 接口继承自 Executor 接口,提供了更多的方法,如提交任务、关闭线程池等。

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MyRunnable implements Runnable {    @Override    public void run() {        // 线程执行的代码    }}public class Test {    public static void main(String[] args) {        ExecutorService executorService = Executors.newFixedThreadPool(2); // 创建 ExecutorService 对象        executorService.execute(new MyRunnable()); // 执行线程        executorService.shutdown(); // 关闭线程池    }}

在该例子中,我们使用 Executors 工厂类创建了一个固定大小为 2 的线程池,然后使用 execute() 方法执行了一个 MyRunnable 对象,最后使用 shutdown() 方法关闭了线程池。

ThreadPoolExecutor

ThreadPoolExecutor 类是 ExecutorService 接口的默认实现,提供了更为灵活的线程池管理。

import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class MyRunnable implements Runnable {    @Override    public void run() {        // 线程执行的代码    }}public class Test {    public static void main(String[] args) {        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new LinkedBlockingQueue()); // 创建 ThreadPoolExecutor 对象        threadPoolExecutor.execute(new MyRunnable()); // 执行线程        threadPoolExecutor.shutdown(); // 关闭线程池    }}

在该例子中,我们使用 ThreadPoolExecutor 类创建了一个大小为 2-4 的线程池,使用 execute() 方法执行了一个 MyRunnable 对象,最后使用 shutdown() 方法关闭了线程池。

标签:

精彩放送

【多措并举确保粮食安全】亩产588.06公斤!我省旱地小麦单产再创新高

家里拆迁可以申请经适房吗? 拆迁户能申请经济适用房吗_天天讯息

颜值高还省油!新款捷豹 SUV 上市 同级唯一可选插混? 全球快资讯

连连看小游戏免费_连连看2 6|当前速读

奇瑞汽车六次上榜,“民族品牌”的排面从何而来?

国内多地县域充电桩安装量翻番 呈现哪些新趋势?

【环球报资讯】大学的数学专业有哪些科目考研究生要考

【天天报资讯】amd cpu怎么安装_cpu怎么安装

全球百事通!led灯是什么材料制成的

关注:山西移动网上营业厅_山西电信网上营业厅官网

招商银行临时额度到期(临时额度到期了是不是要全部归还)

全球微速讯:2023年深圳有多少个区_深圳有多少个区

热资讯!launcher_launch

2023年中国龙舟公开赛(湖北·荆州站)开赛 今日报

icloud下载照片是拍摄时间吗_icloud下载照片|天天报道

三角形底面积计算公式_三角形面积计算公式大全 全球讯息

当前看点!法线贴图原理_法线贴图

三七撞上二十一下载地址_三七撞上二十一下载_焦点精选

高盛:市场对美国通胀下降的速度预期太乐观了_每日快报

动态焦点:Redmi K60E送不送贴膜吗

焦点观察:0-3波兰队!中国女排无缘七连胜,分析有3大输球原因

5c 5s屏幕通用吗(5c 5s)

第一季度电力概念股每股收益排行榜一览

天天新资讯:国家防总对浙江等省份启动防汛四级应急响应

“家门口的便民集市”真暖心

杨颖,杨紫,王源,乐华,虞书欣

神农乡村生态环保(山西)有限公司在夏河开展投资考察活动 环球今日讯

即时焦点:文化石家庄——神秘中山国(上)

河南发布地质灾害黄色预警!这些地方有大到暴雨、局部大暴雨|天天热推荐

儿子被喂食大量安眠药,母亲和情夫当晚做肮脏之举,父亲死不瞑目

焦点快报!乡村之美丨浙南小渔村实现年游客量超八十万!秘诀是什么?

发射天宫2号的目的是什么意思_发射天宫2号的目的是什么 环球今日讯

环球新消息丨忻城税务:多措并举推动纳税缴费服务再升级

6:17:监管层释放重磅信号,A股牛蹄能否归来?

世界热推荐:山东艺术学院举行2023届毕业生毕业典礼暨学位授予仪式

原神苍漠囿土挑战方碑完成攻略

户枢不蠹流水不腐意思_户枢不蠹

水利部和中国气象局联合发布山洪灾害气象黄色预警

热消息:哈洽访谈|封昌红:为哈洽会插上创意设计的翅膀

洛雪音乐助手使用方法介绍

弗洛伊德死亡3年后,美国发布重磅报告揭种族歧视问题_天天看热讯

全球看热讯:龙韵股份(603729)6月1日股东户数0.91万户,较上期增加12.16%

2023年中国房企品牌排行TOP100

当前报道:原神:旅行者新皮肤又来了,新专武曝光?宵宫、甘雨皮肤超好看!

湖南开展专项整治行动保障农民工工资支付

牛皮沙发的种类_牛皮沙发的选购技巧是什么 每日看点

片碱的化学式怎么写(片碱的化学名称)|快资讯

环球微动态丨世界防治荒漠化与干旱日 | 防沙治沙的“中国智慧”

划龙舟看龙舟,五类安全提示莫疏忽!-焦点速读

世界球精选!三溪村夜赛龙舟盛大启幕!红花郎携手千年古邑共话经典与传承

qq.com_fcm qq com_世界新消息

当天成团/当天勘察/当月开工,昊铂发布超充到家“当日达”

2022年全国社会物流总额实现347.6万亿元!《中国商贸物流发展报告(2022年)》发布|今日关注

全球热门:空中俯瞰山水相融美如画 感受祖国大地夏日之美

沭阳县塘沟镇碾盘村:开展“阅汇四季”之阅读一“夏”主题活动

环球简讯:专家谈东西方文明互鉴:促进中外年轻人走进彼此生活

世界观天下!美国计划向乌克兰提供F-16战机 俄称已向美方发出外交照会

普拉提45分钟全套教程(普拉提)

智慧骨科机器人落户杭州医院 为患者提供更加安全、精准的医疗服务 环球看点

全球资讯:则Pixel手机应在重新启动时显示新的黑色启动动画

世界观察:卢大使卸任,临别赠言让欧洲如坐针毡!

欧吉桑和欧巴桑_欧吉桑

酒协公布!2023白酒圈“大洗牌”,五粮液王者归来,茅台地位不保 当前资讯

M5改装跑车驾驶好玩吗 M5改装跑车驾驶玩法简介_世界快播

哈尔滨站到太平机场大巴时刻表(哈尔滨火车站到机场大巴时刻表)

即时看!邮轮复航在即,准备好了吗?山东港口联合各方开展邮轮作业模拟通关演练

江西通报:是“老鼠类啮齿动物头部”

二战老照片完美上色:英勇的意大利游击队员 美军士兵鏖战硫磺岛

护航中考 浐灞公安推出多项暖心服务举措

李玉斌(关于李玉斌的简介) 全球聚看点

个人签名怎么写才霸气女_个人签名怎么写|环球热文

天天即时:拼多多百亿补贴618狂欢来袭 每人最高可领290元优惠券

美股异动|哈门那跌2% 2023财年每股收益指引低于预期 环球热点

天天日报丨世界主要国家海军一个航母打击群 通常由几艘各类舰艇编成 _360

重点聚焦!微信有人工客服吗在哪里(微信有人工客服吗)

市民体验大运会交通保障 设置大运会专用道 增加K6K7车次_天天热消息

空调什么牌子的好还便宜_空调什么牌子的好|热点评

属羊的是199几年出生的_属羊的是哪一年出生的简介介绍

世界观天下!非典型形态的危害食品安全犯罪

焦点速读:赛博仙侠外壳+传统文化底蕴,《梦幻新诛仙》新门派“泰裤辣”

金昌市首个邮银“乡村振兴金融工作室”挂牌成立-今日讯

关注:缺陷责任期与质量保修期的区别和判定_缺陷责任期与质量保修期的区别

河西区:发挥金融资源优势 助推实体经济发展

温暖的弦结局_温暖的弦大结局简介和详情介绍

电子数据取证可破解不法分子AI换脸术——对话中国科学院软件研究所研究员、博士生导师丁丽萍

天天讯息:6月20日,第十三届中俄文化大集在黑河开幕!大集活动剧透

观察:新华全媒+|探访高考评卷现场:各地严把评卷质量关

人有三把火什么意思?火灭了会死?-每日讯息

全球热头条丨记者观察 | 人民币汇率的韧性与弹性

全球看热讯:华润系入股金种子酒一年后:扭亏为重任、继续引进人才

马戴灞上秋居_灞上是什么意思 每日快播

英国央行6月料升息至4.75%,因通胀意外顽固-全球信息

热点!京津城际扩容 天津各站去往北京方向日均总运能增加超1.6万人次

盐城市优化金融服务激活实体动能

福建罗源:迎峰度夏 保障电煤供应|世界讯息

特斯拉FSD全面入华,谁松了一口气?

微资讯!南岭民爆:子公司中标47亿元工程项目

海口综保区金盘园区中央大道改造完工试通车

我在尼泊尔的街头用长焦镜头抓拍的照片 全球看点

采洽热烈人气旺