`
daichangfu
  • 浏览: 263826 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不使用synchronized模拟Single Threaded Execution Pattern

    博客分类:
  • java
阅读更多
public class Gate {
    private int counter = 0;
    private String name = "Nobody";
    private String address = "Nowhere";
    private final Mutex mutex = new Mutex();
    public void pass(String name, String address) { // 并非synchronized
        mutex.lock();
        try {
            this.counter++;
            this.name = name;
            this.address = address;
            check();
        } finally {
            mutex.unlock();
        }
    }
    public String toString() { // 并非synchronized
        String s = null;
        mutex.lock();
        try {
            s = "No." + counter + ": " + name + ", " + address;
        } finally {
            mutex.unlock();
        }
        return s;
    }
    private void check() {
        if (name.charAt(0) != address.charAt(0)) {
            System.out.println("***** BROKEN ***** " + toString());
        }
    }
}


public final class Mutex {
	private boolean basy = false;
	
	public synchronized void lock(){
		while (basy) {
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		basy = true;
	}
	
	public synchronized void unlock(){
		basy = false;
		notifyAll();
	}
	
	
}
 

 

分享到:
评论

相关推荐

    Java synchronized使用案例

    在`Synchronized`压缩包中,可能包含了通过实验来演示`synchronized`关键字使用的一些Java代码。例如,创建一个共享资源类,然后通过多个线程去操作这个资源,使用`synchronized`关键字来保证线程安全。实验可能涉及...

    Synchronized锁在Spring事务管理下线程不安全

    Synchronized锁在Spring事务管理下,导致线程不安全。

    java锁机制Synchronizedjava锁机制Synchronized

    这些房间可以被分为两种:上锁房间(synchronized 方法)和不上锁房间(普通方法)。每个对象都有一个钥匙(key),该钥匙可以打开所有上锁的房间。 Synchronized 方法 当一个线程想要进入一个上锁房间时,它需要...

    java中synchronized的使用

    java中synchronized的使用,java中的锁锁的到底是什么?是括号里的代码块吗?肯定不是的;

    多线程.txt

    多线程入门,多线程基础知识,描述了Synchronized的线程互斥原理,和Single Threaded Execution模式,符合基础入门的用户可以好好学习,加深理解

    [JAVA][synchronized的使用]

    本篇文章将深入探讨`synchronized`的使用,包括其基本原理、使用方式以及实际应用场景。 1. **synchronized的基本原理** `synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`...

    java里面synchronized用法.doc

    synchronized 关键字不能被继承,即基类的 synchronized 方法在继承类中不自动变成 synchronized 方法。例如: ```java public class MyClass { public synchronized void myMethod() { // ... } } public class...

    Android synchronized 测试案例

    本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...

    volatile和synchronized的区别

    - 在不确定如何选择时,优先考虑`synchronized`,因为它提供了更全面的保障,避免因使用不当导致的数据不一致性问题。 总之,在实际开发中,理解并灵活运用这两种机制是非常重要的,它们可以帮助我们构建出高效、...

    synchronized用法大全实例

    本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...

    使用synchronized实现多线程同步.pdf

    这篇文档主要讨论了如何使用`synchronized`关键字来控制多线程对共享数据的访问。 首先,`synchronized`关键字有两种主要的用法:修饰实例方法和修饰代码块。当`synchronized`用于修饰实例方法时,它会锁定当前对象...

    synchronized的几种示例

    本文将深入探讨`synchronized`的几种使用示例,包括方法加锁、代码块加锁(针对`this`和对象)以及静态方法加锁。 1. **方法加锁** 当在实例方法前使用`synchronized`关键字时,它会锁定当前对象的监视器,只有...

    java中synchronized用法

    "Java 中 synchronized 用法详解" Synchronized 是 Java 语言中用于解决多线程共享数据...synchronized 关键字是 Java 语言中解决多线程共享数据同步问题的重要工具,但需要正确地使用它,以免造成死锁和系统开销。

    synchronized关键字的用法详解

    `synchronized`关键字有两种主要的使用方式:一种是在方法声明中使用,另一种则是在代码块中使用。 ##### 1. synchronized方法 在方法声明中添加`synchronized`关键字,可以将整个方法体变成同步代码块。例如: `...

    synchronized并发讲解源码.zip

    在实际开发中,合理使用`synchronized`能有效防止数据不一致性和死锁问题,但过度使用可能会导致性能下降。因此,需要根据具体情况权衡其利弊,并考虑使用其他并发控制工具,如`java.util.concurrent`包中的`...

    正确使用多线程同步锁@synchronized()1

    本文将深入探讨`@synchronized`的工作原理、特点以及使用时需要注意的事项。 首先,`@synchronized`的原理是基于递归互斥锁(Recursive Mutex)。在Objective-C中,当你使用`@synchronized`块包围一段代码时,会为...

    Java使用synchronized修饰方法来同步线程的实例演示

    如果一个方法或代码块不涉及共享数据,就没有必要使用synchronized。 6. **其他并发控制工具** Java提供了一些其他的并发控制工具,如`java.util.concurrent`包中的`ReentrantLock`、`Semaphore`、`CyclicBarrier`...

    使用synchronized实现多线程同步[借鉴].pdf

    因此,对于不需要严格同步的代码,应尽量避免使用`synchronized`,以提高程序的并发性能。 总之,`synchronized`关键字是Java中实现线程同步的关键手段,它可以确保共享数据在多线程环境中的正确性,但也需要谨慎...

    synchronized关键字的实质及用法

    1. **synchronized的两种使用方式** - **方法同步**:在方法声明前加上`synchronized`关键字,这将使得整个方法成为同步方法,每次只有一个线程可以执行该方法。 ```java public synchronized void someMethod...

    java synchronized 学习

    Java synchronized 学习 Java 中的 synchronized 关键字是用来实现线程同步的,它可以用来修饰方法、代码块和静态方法,以确保在多...通过使用 synchronized 同步锁,可以确保在多线程环境下数据的一致性和安全性。

Global site tag (gtag.js) - Google Analytics