Java互斥锁简单实例

news2024/11/13 10:16:16

Java互斥锁简单实例

本文实例讲述了java互斥锁。分享给大家供大家参考。具体分析如下:

互斥锁,常常用于多个线程访问独占式资源,比如多个线程同时写一个文件,虽然互斥访问方式不够高效,但是对于一些应用场景却很有意义

//没有互斥锁的情况(可以自己跑跑看运行结果):

public class LockDemo {

// private static Object lock = new Object();

// static确保只有一把锁

private int i = 0;

public void increaseI() {

// synchronized (lock) {

for(int k=0;k<10;k++) { // 对i执行10次增1操作

i++;}

System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i);

// }}

public static void main(String[] args) {

LockDemo ld = new LockDemo();

int threadNum = 1000;

// 选择1000个线程让结果更加容易观测到

MyThread[] threads = new MyThread[threadNVXGjmLDum];

for(int i=0;i

threads[i] = new MyThread(ld);

// 所有线程共用一个LockDemo对象

threads[i].start();}}}

class MyThread extends Thread {

LockDemo ld;

public MyThread(LockDemo ld) {

this.ld = ld;}

public void run() {

ld.increaseI();}}

//加上互斥锁以后:

public class LockDemo {

private static Object lock = new Object();

// static确保只有一把锁

private int i = 0;

public void increaseI() {

synchronized (lock) {

for(int k=0;k<10;k++) {

// 对i执行10次增1操作

i++;}

System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i);}}

public static void main(String[] args) {

LockDemo ld = new LockDemo();

int threadNum = 1000;

// 选择1000个线程让结果更加容易观测到

MyThread[] threads = new MyThread[threadNum];

for(int i=0;i

threads[i] = new MyThread(ld);

// 所有线程共用一个LockDemo对象

threads[i].start();}}}

class MyThread extends Thread {

LockDemo ld;

public MyThread(LockDemo ld) {

this.ld =http:// ld;}

public void run() {

ld.increaseI();}}

希望本文所述对大家的java程序设计有所帮助。

threads[i] = new MyThread(ld);

// 所有线程共用一个LockDemo对象

threads[i].start();}}}

class MyThread extends Thread {

LockDemo ld;

public MyThread(LockDemo ld) {

this.ld = ld;}

public void run() {

ld.increaseI();}}

//加上互斥锁以后:

public class LockDemo {

private static Object lock = new Object();

// static确保只有一把锁

private int i = 0;

public void increaseI() {

synchronized (lock) {

for(int k=0;k<10;k++) {

// 对i执行10次增1操作

i++;}

System.out.println(Thread.currentThread().getName() + "线程,i现在的值:" + i);}}

public static void main(String[] args) {

LockDemo ld = new LockDemo();

int threadNum = 1000;

// 选择1000个线程让结果更加容易观测到

MyThread[] threads = new MyThread[threadNum];

for(int i=0;i

threads[i] = new MyThread(ld);

// 所有线程共用一个LockDemo对象

threads[i].start();}}}

class MyThread extends Thread {

LockDemo ld;

public MyThread(LockDemo ld) {

this.ld =http:// ld;}

public void run() {

ld.increaseI();}}

希望本文所述对大家的java程序设计有所帮助。

threads[i] = new MyThread(ld);

// 所有线程共用一个LockDemo对象

threads[i].start();}}}

class MyThread extends Thread {

LockDemo ld;

public MyThread(LockDemo ld) {

this.ld =http:// ld;}

public void run() {

ld.increaseI();}}

希望本文所述对大家的java程序设计有所帮助。

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

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

相关文章

STM32 LoRa(学习二)

LoRa关键参数说明 LoRa数据包由三个部分组成&#xff1a;前导码、可选报头、数据有效负载。 前导码&#xff1a;用于保持接收机与输入的数据流同步。默认情况下&#xff0c;数据包含有12个符号长度的前导码。前导码是一个可以通过编程来设置的变量&#xff0c;所以前导码的长度…

我总结的接地概念,为什么水泥大地是导体,为什么要接地,TT和TN供电系统等

我总结的接地概念&#xff0c;为什么水泥大地是导体&#xff0c;为什么要接地&#xff0c;TT和TN供电系统等 wxleasyland 个人参考网上资料理解的相关接地的问题&#xff0c;可能会有不对的地方&#xff0c;仅供参考。 主要参考了大神的&#xff1a;《浅谈接地》https://zhuan…

软件测试员怎么提升自己的职业竞争力?

目录 管理方向 技术方向 初级测试人员 中级测试人员 高级测试人员 首先分析下软件测试岗位的发展方向&#xff1a;软件测试岗位可以向两个方向发展&#xff0c;一个管理方向&#xff0c;一个技术方向。现在很多做测试的人感到很迷茫&#xff0c;自己整天做着重复的事情&am…

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按&#xff1a;传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点&#xff0c;而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么&#xff1f;它的方案的设计思路是什么&#xff1f;今天&#xff0c;浪潮信息驱动工程师刘伟带…

从零开始学python(十三)爬虫工程师自动化和抓包

前言 回顾之前讲述了python语法编程 必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析&#xff0c;爬虫数…

三十三章 uboot使用(universal boot loader)

Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设&#xff0c;然后将Linux内核从flash(NAND&#xff0c;NORFLASH&#xff0c;SD&#xff0c; MMC 等)拷贝到 DDR 中&#xff0…

Mybatis-plus的批量插入真的不能用吗?

目录 &#x1f9e8;一、前言 &#x1f9e8;二、走进源码 1.进入 saveBatch 看下 2.往里ServiceImpl#saveBatch走 3.SqlHelper#executeBatch(Class, Log, Collection, int, BiConsumer),e> 4.SqlHelper#executeBatch(Class entityClass, Log log, Consumer consumer) …

Kata Containers

Kata Containers&#xff08;简称 Kata 或 Kata Containers&#xff09;是一个开源的容器运行时项目&#xff0c;它提供了一种轻量级的虚拟化解决方案&#xff0c;用于在容器内运行应用程序。Kata Containers 结合了虚拟机&#xff08;VM&#xff09;和容器的优势&#xff0c;旨…

无涯教程-jQuery - innerHeight( )方法函数

innerHeight()方法获取第一个匹配元素的内部高度(不包括边框&#xff0c;包括填充)。 innerHeight( ) - 语法 selector.innerHeight( ) innerHeight( ) - 示例 以下是一个简单的示例&#xff0c;简单说明了此方法的用法- <html><head><title>The jQuery…

银河麒麟桌面操作系统V10 (SP1) ARM64 aarch64 radeontop查看amd gpu使用率

安装radeontop yeqiangyeqiang-greatwall:~$ sudo apt install radeontop 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了&#xff1a;gconf-service gconf-service-backend gconf2-…

2.nio入门和netty

1.nio实现网络编程 //服务端 public class NIOServer {public static void main(String[] args) throws Exception{//创建ServerSocketChannel -> ServerSocketServerSocketChannel serverSocketChannel ServerSocketChannel.open();//绑定一个端口6666, 在服务器端监听se…

vue 使用vue-json-viewer 展示 JSON 格式的数据

npm install vue-json-viewer --save<el-button type"primary" click"previewClick">预览</el-button><el-dialog title"预览" :visible.sync"previewVisible" width"70%"><viewer ref"viewer&qu…

回顾.NET系列:Framework、Net Core、Net 过往

一、个人最近工作变化 我经历了可能很多技术人都会经历的过程&#xff0c;从一名纯粹的技术人员转型成为了一名技术管理我已经不再单纯了&#xff0c;经历了从做好自己的事&#xff0c;搞定一个复杂模块和系统&#xff0c;到带领一个小团队&#xff0c;攻克一个个复杂项目&…

迷你系统天花板 英特尔蝰蛇峡谷NUC12 评测

1.全新设计的NUC12 蝰蛇峡谷&#xff08;Serpent Canyon&#xff09; i7 12700HArc A770M 16GB版本开箱 近年来&#xff0c;ITX主机和小型化系统变得越来越受欢迎。英特尔的NUC受到许多玩家们的关注。作为mini主机的代表NUC小巧设计和灵活性使它成为很多玩家和科技爱好者的选择…

Openlayers实战:绘制图形,导出KML文件

KML 文件使用 XML 通过存储位置、图像叠加、视频链接以及线条、形状、3D 图像和点等建模信息来表达地理注释和可视化。在OPenlayers的交互中,经常性的我们要导出一些数据,在这个实战中,演示的是导出KML文件。 安装依赖 npm install file-saver --save 效果图 导出的文件 &l…

Python数据可视化工具——Seaborn

1 简介 Seaborn基于matplotlib&#xff0c;它在matplotlib的基础上进行了更高级的API封装&#xff0c;便于用户可以更加简便地做出各种有吸引力的统计图表。它还能够高度兼容numpy与pandas数据结构以及scipy与statsmodel等统计模式。用更简单的调用呈现更多图表 seaborn官网&a…

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-初始化列表之后执行

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-初始化列表之后执行 二开位置 OnlineAutoList.js.initAutoList 定义方法 /*** 初始化列表之后执行* js增强* param tableColumns* returns {Promise<void>|*}*/onlineTableContext["afterInitAutoList…

2023 ISSE观察:智能遮阳窗帘行业蓬勃发展,AI设计引热议

7月31日&#xff0c;上海国际智能遮阳与建筑节能展览会落下帷幕。作为智能遮阳的行业展会&#xff0c;展会三天&#xff0c;现场热闹非凡&#xff0c;参展商和观展者络绎不绝。 作为一大行业盛事&#xff0c;2023 ISSE展会方打造了五大展区&#xff0c;除了提供系统门窗装修方案…

微信如何提高回复信息速度?

规范流程话术有什么用&#xff1f;为了提高回复客户的效率和质量&#xff0c;可以事先设计好的一套标准化的对话模板。它通常包括多个环节和问题&#xff0c;帮助客服人员或销售人员在与客户沟通时&#xff0c;按照标准化的流程进行&#xff0c;以提高工作效率和客户满意度。 如…

vue echart3个饼图

概览&#xff1a;根据UI设计需要做3个饼图且之间有关联&#xff0c;并且处理后端返回的数据。 参考链接&#xff1a; echart 官网的一个案例&#xff0c;3个饼图 实现思路&#xff1a; 根据案例&#xff0c;把数据处理成对应的。 参考代码&#xff1a; 1.处理后端数据&am…