随笔 - 15  文章 - 4  评论 - 1  阅读 - 49869

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已完成

posted on   粒子少爷  阅读(1993)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示