Java中多线程同时访问同一个对象的处理
Java中多线程同时访问同一个对象或者资源时,会出现后面线程修改前面线程正在使用的数据,因此需要一个数据保护的机制。在Java中提供了同步锁(synchronized)的机制,同步锁(synchronized)会保护代码块只能被一个线程运行。
现在以把一个变量从0加到20为例:
运用多线程同步增加
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
创建线程类
-----------------------------------------------------------------------------------------
public class Station extends Thread{
//通过构造方法给线程名字赋值
public Station(String name){
super(name);
}
//保证每个线程操作的是同一个变量,这里使用静态变量
static int a=0;
//创建一个静态钥匙
static Object ob=“aa”;//可以是任意值,随意取的,
public void run(){
while(a<20){
//主要步骤:拿上钥匙加锁,出来后让出钥匙
synchronized(ob){
if(a<20){
System.out.println(getName()+"+1完成,数值为"+a);
a++;
}else{
System.out.println("增大到20已完成");
}
}
try{
//休息1秒钟
speel(1000);
}catch (Exception e) {
{
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
创建Mymian类调用运行线程
------------------------------------------------------------------------------------------------------------------------
public class Mymian{
public static void mian(String[] args){
//线程实例化,为每一个线程起名字
Station station1=new Station(“线程1”);
Station station2=new Station(“线程2”);
Station station3=new Station(“线程3”);
//启动线程
station1.start();
station2.start();
station3.start();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
运行结果:
-------------------------------------------------------------------------------------------------
线程1+1完成,数值为0
线程2+1完成,数值为1
线程3+1完成,数值为2
线程1+1完成,数值为3
线程3+1完成,数值为4
线程2+1完成,数值为5
线程2+1完成,数值为6
线程1+1完成,数值为7
线程3+1完成,数值为8
线程2+1完成,数值为9
线程3+1完成,数值为10
线程1+1完成,数值为11
线程2+1完成,数值为12
线程1+1完成,数值为13
线程3+1完成,数值为14
线程2+1完成,数值为15
线程1+1完成,数值为16
线程3+1完成,数值为17
线程3+1完成,数值为18
线程1+1完成,数值为19
增大到20已完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术