`

synchronized关键字实现信号量同步功能

阅读更多
下面的代码,不加mys.acquire();和mys.release();的时候,各线程会交替输出。
加上的话,各线程会串行输出,说明信号量机制生效了。

MySemaphore.java

interface Semaphore { 
  void acquire();
  void release();
} 

public class MySemaphore implements Semaphore{
	private StringBuffer runFlag = new StringBuffer("true");

  public void acquire(){
  	synchronized(runFlag){
      if(runFlag.toString().equals("true")){
      	runFlag.setLength(0);
      	runFlag.append("false");
      }else{
        try{
            runFlag.wait();
        	runFlag.setLength(0);
      	    runFlag.append("false");
        }catch(Exception e){
      	  e.printStackTrace();
        }
      }
    }
  }

  public void release(){
  	synchronized(runFlag){
        runFlag.setLength(0);
      	runFlag.append("true");
      	try{
      	  runFlag.notify();
      	}catch(Exception e){
      		e.printStackTrace();
      	}
    }
  }

	public static void main(String[] args){
		
		
		Runnable run = new Runnable(){
			    MySemaphore mys = new MySemaphore();
			
				public void run(){
					mys.acquire();
					System.out.println(Thread.currentThread().getName() + " start");
					for(int j=0;j<10;j++){
					  System.out.println(Thread.currentThread().getName() + " start " + j);
					}
					System.out.println(Thread.currentThread().getName() + " end");
					mys.release();
				}
		};
		
		Thread t;
		for(int i=0;i<10;i++){
		  t = new Thread(run);
		  t.start();
		}
	}
}
分享到:
评论

相关推荐

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

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

    java哲学家就餐问题

    Java编程中解决这个问题,通常会用到多线程和同步机制,如synchronized关键字或信号量。 在这个解决方案中,"图形界面"使得问题的展示更为直观,用户可以观察到哲学家们的行为和筷子的状态。重庆大学的学生可能会...

    java同步互斥信号量问题

    在Java中,我们可以使用`java.util.concurrent.Semaphore`类来实现信号量。创建一个信号量时,可以指定初始许可证的数量。以下是一个简单的示例: ```java import java.util.concurrent.Semaphore; public class ...

    进程同步实验报告

    同时,我们也了解到在实际编程中,清晰地理解各进程的请求、等待、释放等操作,以及正确使用信号量同步机制的重要性。 实验截图和心得体会部分未提供,但可以想象在运行过程中,生产者、消费者和检查员线程交替运行...

    Java多线程数据同步处理的研究分析.pdf

    除了 synchronized,Java 还提供了其他同步工具,如 ReentrantLock(可重入锁)、Semaphore(信号量)、Condition(条件变量)等,它们提供了更灵活的控制方式。例如,ReentrantLock 具有与 synchronized 类似的功能...

    JAVA实现线程间同步与互斥生产者消费者问题

    3. **Semaphore信号量**:Java的`java.util.concurrent.Semaphore`类可以用于限制同时访问某个资源的线程数量,实现线程的同步。在这个场景下,可以设置信号量的许可数量为队列的容量,生产者在添加产品前需要获取一...

    Java并发 synchronized锁住的内容解析

    在实际开发中,synchronized关键字可以应用于各种场景,例如,在多线程环境中访问共享资源、实现线程安全的数据结构、解决线程安全问题等等。 Java并发synchronized锁住的内容解析是Java并发编程中的一种重要机制,...

    Java多线程教程资料(强烈推荐).docx

    Java 中提供了多种方式来实现线程同步,如 synchronized关键字、Lock 接口、Condition 接口等。synchronized 关键字可以用于方法或块级别的同步,而 Lock 接口可以用于锁的实现。Condition 接口可以用于线程之间的...

    线程互斥和同步代码样本滴水三期信号量布置的作业

    在滴水三期的作业中,你可能需要编写代码来演示如何使用信号量实现线程的同步。这可能包括创建多个线程,每个线程都需要访问某个共享资源,并通过信号量来协调它们的执行。例如,你可以设计一个场景,其中一些线程...

    Android多线程之同步锁的使用

    对于Java来说,最常用的同步机制就是synchronized关键字,他是一种基于语言的粗略锁,能够作用于对象、函数、class。每个对象都只有一个锁,谁能够拿到这个锁谁就有访问权限。当synchronized作用于函数时,实际上锁...

    Java多线程通信机制研究.pdf

    Java多线程通信机制的实现方法包括使用synchronized关键字来实现同步,使用wait()和notify()方法来实现线程间的通信。线程之间的通信是通过共享变量和信号量来实现的。共享变量是指多个线程之间共享的变量,而信号量...

    java Thread & synchronized & concurrent 线程、同步、并发

    Java提供了丰富的并发工具类,如`Semaphore`信号量、`CyclicBarrier`屏障、`CountDownLatch`倒计时器和`Future`未来结果等,它们可以帮助我们设计出更灵活、高效的并发策略。此外,`java.util.concurrent`包下的`...

    Java synchronized使用案例

    2. **Semaphore**:信号量,可以控制同时访问特定资源的线程数量。 3. **CountDownLatch/CyclicBarrier/Phaser**:这些工具类用于协调多线程间的同步,实现更复杂的并发控制。 五、实际案例 在`Synchronized`压缩包...

    java线程同步详解

    Java中的线程同步还有其他工具,例如`java.util.concurrent`包中的`Semaphore`、`ReentrantLock`等,它们提供了更高级的同步控制,如信号量控制、公平锁、非公平锁等。 线程同步的主要目的是防止数据竞争(Data ...

    Java并发机制的底层实现原理.pdf

    synchronized关键字是Java中实现同步的基础,它可以用来修饰方法或者代码块,确保同一时刻只有一个线程能够执行被synchronized修饰的代码。synchronized的实现依赖于Java对象头中的MarkWord,该部分记录了锁的状态。...

    Java实现的进程同步与互斥(PV)

    其中,`Semaphore`类可以用来模拟信号量,从而实现PV操作。`Semaphore`维护了一个许可计数,当计数为0时,表示没有可用的资源,任何试图获取许可的线程将被阻塞,直到有其他线程释放许可。 P操作( acquire() )是...

    实验二进程调度算法和信号量.pdf

    线程同步通过`synchronized`关键字、`wait()`, `notify()`, 和 `notifyAll()`方法实现。 接下来是信号量的使用。信号量是一种同步原语,用于控制对共享资源的访问。实验要求实现`Semaphore.java`,包含`P()`(下降...

    Java资源同步Java资源同步Java资源同步

    这种机制通常包括但不限于锁机制、信号量、条件变量等。良好的资源同步策略能够避免竞态条件的发生,确保程序的正确执行。 #### 2. 同步的重要性 - **提高程序的可靠性**:通过同步机制可以避免由于并发访问导致的...

    静态代理案例---线程买票

    2. **java.util.concurrent包**:Java提供了丰富的并发工具类,如Semaphore(信号量)可以限制同时访问某个资源的线程数量,CountDownLatch可以用于线程间的等待与通知,CyclicBarrier可以实现多线程之间的同步点。...

    PC.rar_生产者与消费者_进程 同步

    例如,在Java中,可以使用Semaphore类来表示信号量,ReentrantLock或synchronized关键字来实现互斥访问。 压缩包中的"PC.doc"可能是生产者与消费者问题的详细文档,包含了算法描述、伪代码或者示例代码。而...

Global site tag (gtag.js) - Google Analytics