`

线程类中的同步关键字

 
阅读更多
public class Constants {

public static int syncIntValue = 0;

public static int syncIntValueExecCount = 0;

}

public class MyRun implements Runnable { 
     
    private String name; 
     
    public MyRun(String name) { 
        this.name = name; 
    } 
     
    public void run() { 
       printSyncIntValue(); 
    } 
      
    public synchronized  void printSyncIntValue() {      
   
    while( Constants.syncIntValue%2 ==0){
            Constants.syncIntValue++; 
            Constants.syncIntValue++; 
           
            }

       
        System.out.println(Constants.syncIntValue);
 
    } 
}


public class Test {

public static void main(String[] args) {

for (int i = 0; i < 5486; i++) {
Thread t = new Thread(new MyRun("syncIntValue"));
t.start();
}

}
}


上面的代码达不到同步的效果,相当于每个线程拥有的是它自己的锁,互不影响,从而跟没加锁一样,可以随意访问公共资源。修改如下:


public void printSyncIntValue() { 
       

    synchronized (name) {
    while( Constants.syncIntValue%2 ==0){
            Constants.syncIntValue++; 
            Constants.syncIntValue++; 
           
            }
}
       
        System.out.println(Constants.syncIntValue);

    } 

或者是:

public void printSyncIntValue() { 
       

    synchronized ("kkk") {
    while( Constants.syncIntValue%2 ==0){
            Constants.syncIntValue++; 
            Constants.syncIntValue++; 
           
            }
}
       
        System.out.println(Constants.syncIntValue);

    } 

不管是name还是字母常量,它都是唯一的对象,其他线程在执行该方法之前必须先获得对象锁。
分享到:
评论

相关推荐

    java的线程同步机制synchronized关键字的理解_.docx

    Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...

    java同步synchronized关键字用法示例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块代码或数据时,可能会导致数据不一致的问题。为了解决这个问题,...

    21-多线程和线程同步1

    Java 中提供了多种线程同步机制,包括 synchronized 关键字、Lock 接口和 AtomicInteger 类。 synchronized 关键字 synchronized 关键字是 Java 中的一个关键字,用于声明同步方法或同步块。synchronized 关键字...

    java 线程同步 信号量控制同步

    Java 中的 synchronized 关键字可以用于实现线程同步。synchronized 关键字可以用来锁定对象或方法,防止多个线程同时访问同一个共享资源。 在 Java 中,还有其他线程同步机制,如volatile 变量、Atomic 变量、Lock...

    Java多线程同步.pdf

    在Java语言中,多线程同步机制的实现可以通过synchronized关键字、ReentrantLock类、 Semaphore类、CountDownLatch类等来实现。 1. 使用synchronized关键字 使用synchronized关键字可以对方法或者代码块进行同步。...

    多线程的批量线程同步解决方案

    线程同步是多线程编程中的重要概念,用于控制不同线程间的执行顺序和访问共享资源的方式,防止竞态条件和死锁的发生。常见的线程同步机制包括: 1. **互斥量(Mutex)**:一种简单的同步机制,一次只有一个线程能获取...

    C#中实现线程同步lock关键字的用法详解

    1. lock关键字保证一个代码块在执行的过程中不会受到其他线程的干扰,这是通过在该代码块的运行过程中对特定的对象加互斥锁来实现的。 2. lock关键字的参数必须是引用类型的对象。lock对基本数据类型如int,long等...

    C#中使用Monitor类、Lock和Mutex类来同步多线程的执行.pdf

    然而,多线程编程中会遇到线程同步问题,这是因为多个线程可能会试图同时访问同一资源,导致资源竞争和数据不一致等问题。为了解决这些问题,C#提供了多种同步原语,如Monitor类、Lock关键字和Mutex类。 Monitor类...

    java线程线程安全同步线程

    Java提供了多种同步机制来防止这些问题,如`synchronized`关键字用于锁定代码块或整个方法,保证同一时间只有一个线程可以执行;`wait()`和`notify()`/`notifyAll()`方法用于线程间的通信,使得线程可以在特定条件下...

    C# 多线程 线程池 线程同步

    **线程同步**是多线程编程中的重要概念,用于控制不同线程对共享资源的访问。C#提供了多种同步机制,包括: 1. **Mutex**:互斥锁,只允许一个线程访问共享资源,其他线程必须等待。 2. **Semaphore**:信号量,...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现方式。Java作为一种广泛应用于分布式系统开发的编程语言,其内部...

    Java线程:volatile关键字

    Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...

    Java关键字分类解释

    `synchronized`用于同步操作,确保线程安全。 #### 七、类型检查与对象创建 - **instanceof**: `instanceof`操作符用于测试一个对象是否属于某个类或接口。 - **new**: `new`操作符用于创建新对象。 - **this/...

    线程同步面试题深入解析

    在Java中,线程同步主要通过`synchronized`关键字来实现,防止多个线程同时访问临界区,以避免出现不可预期的结果。 1. **synchronized修饰同步方法** 使用`synchronized`关键字修饰的方法称为同步方法。同步方法...

    多线程示例,同时同步到进度条

    2. 线程同步:理解锁、信号量等同步原语,确保数据的一致性。 3. 线程间通信:使用条件变量或特定的API进行线程间的协调,如更新进度条的通知。 4. 进度条的平滑更新:通过定时器或异步I/O控制界面更新的频率。 ...

    多线程不同步演示2

    在Java等语言中,可以使用synchronized关键字、锁(如ReentrantLock)或者其他并发工具类来实现同步。 在本演示中,当一个线程正在写入数据时,另一个线程可能已经开始读取,这可能导致以下几种问题: 1. **数据不...

    多线程同步和通讯完整示例

    在编程领域,尤其是在Java这样的多线程环境中,理解和掌握多线程同步与通讯至关重要。本文将深入探讨这些概念,以及如何使用synchronized关键字、wait-notify机制和Lock接口来实现线程间的同步与通讯。 首先,多...

Global site tag (gtag.js) - Google Analytics