`
zengshaotao
  • 浏览: 787555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对class的同步注意事项

 
阅读更多

package web;

 

/**

 * synchronized锁住了整个静态类

 * @author zengst

 *

 */

class aaa2{

 

private static int a=2;

 

//定义了私有构造函数,外部无法通过该构造函数构造实例,除非重载

 

private aaa2(){}

 

public static void getInstance(){

if(a > 0){

System.out.println(Thread.currentThread().getName()+"getInstance");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized(aaa2.class){

System.out.println(Thread.currentThread().getName());

System.out.println(a);

a--;

System.out.println(a);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName());

}

}

}

 

}

 

public class StaticSharedTest {

 

public static void main(String args[]){

 

zengst2 z = new zengst2();

Thread t1 = new Thread(z);

Thread t2 = new Thread(z);

Thread t3 = new Thread(z);

t1.start();

t2.start();

t3.start();

}

}

 

class zengst2 implements Runnable{

 

public void run() {

aaa2.getInstance();

}

}

 

运行结果:

Thread-0getInstance

Thread-1getInstance

Thread-2getInstance

Thread-0

2

1

Thread-0

Thread-2

1

0

Thread-2

Thread-1

0

-1

Thread-1

 
分析,这里出现了-1.是没有按照预期的。
原因是因为,三个线程都进入了a>0的判断,虽然紧接着实现了对整个class的同步。
分享到:
评论

相关推荐

    CVS使用注意事项

    ### CVS使用注意事项详解 #### 一、概述 CVS(Concurrent Versions System)是一种源代码版本控制系统,主要用于软件开发过程中的版本控制管理。CVS能够有效地管理多个开发者的协同工作,确保代码的一致性和完整性...

    hibernate 事务管理注意事项

    本文将围绕“hibernate 事务管理注意事项”这一主题展开讨论,通过对给定文件中的标题、描述、标签以及部分内容的分析,深入探讨在实际应用中需要注意的关键点。 #### 一、AH业务逻辑实现模式 1. **如果未使用事务...

    线程同步面试题深入解析

    6. **注意事项** - 合理使用`synchronized`,过多的同步可能导致性能下降。 - 避免死锁:当两个或更多线程互相等待对方释放资源时,会导致所有线程都无法继续执行。 - 考虑使用高级并发工具,如`ReentrantLock`、...

    C#的WebBrowser的操作与注意事项介绍

    以下是对C# WebBrowser操作与注意事项的详细说明: 1. **初始化WebBrowser控件** - 在`public partial class Form1 : Form`之上添加 `[PermissionSet]` 和 `[ComVisibleAttribute]` 特性,这是为了确保控件可以在...

    JNI 多线程同步机制的源码实现

    6. **注意事项** - 为了防止资源泄露,确保在不再需要同步时正确地销毁互斥量。 - 避免死锁:合理安排线程的执行顺序和同步资源的获取,确保不会出现互相等待的情况。 - 尽可能减少同步区域,以降低性能开销。 ...

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

    synchronized 的使用注意事项 1. synchronized 方法可能会对系统性能产生影响, nên尽量避免无谓的同步掌握。 2. 使用 synchronized 关键字时,需要明确对象的锁是谁的。 3. synchronized 块可以作为一种解决方法...

    Discuz与ThinkPHP同步登录

    《Discuz与ThinkPHP同步登录实现详解》 在互联网应用开发中,用户登录系统的...通过以上步骤和注意事项,开发者可以有效地实现在 ThinkPHP 应用中与 Discuz 论坛的同步登录功能,提高用户体验,同时简化管理复杂度。

    CTcpSocket--Class

    此外,压缩包中的"www.pudn.com.txt"文件可能是项目相关的文档或说明,包含了更多关于CTcpSocket类的具体用法、示例代码或者注意事项,建议参考阅读以获取更详细的信息。 总结来说,CTcpSocket类是Windows环境下...

    JAVA面试体系一条龙(含笔试与各种注意事项与标准模板)

    "JAVA面试体系一条龙(含笔试与各种注意事项与标准模板)"这个资源显然旨在帮助求职者全面准备Java面试,涵盖笔试环节以及面试的各种策略和技巧。 一、Java基础知识 在Java面试中,基础扎实是必不可少的。这包括但...

    delphi vcl线程同步synchronize

    注意事项与最佳实践 - 避免长时间的同步操作:Synchronize会阻塞工作线程,如果同步操作耗时过长,可能会导致应用响应迟钝。对于复杂的操作,可以考虑使用其他同步机制,如TThread.Queue或TTask.Run。 - 尽量减少...

    Hibernate 2nd-level cache: JBoss Caching 配置与注意事项

    本篇文章将深入探讨Hibernate中的第二级缓存,并以JBoss Caching为例,讲解配置和使用过程中的注意事项。 一、Hibernate第二级缓存概念 第二级缓存是SessionFactory级别的共享缓存,它存储了多个Session之间的持久...

    使用互斥对象(Mutex)实现线程同步

    6. **使用注意事项** - 为了防止死锁,务必确保在完成操作后释放Mutex。如果线程在持有Mutex时崩溃,Mutex将不会被释放,其他线程可能会永久等待。 - Mutex的使用应尽可能地限制在最短的时间内,以减少阻塞其他...

    基于django ManyToMany 使用的注意事项详解

    除了上述两点,使用Django的ManyToManyField时还需要注意以下事项: - 要确保ManyToManyField指定的关联模型是有效的,不能将ManyToManyField直接指向一个尚未定义或不存在的模型。 - 如果关联的是同一个应用下的...

    c#使用PortableDeviceApiLib读取便携式设备 调试心得注意事项.doc

    以下是一些关键步骤和注意事项: 1. 引用PortableDeviceApiLib和相关DLL:首先,你需要在项目中添加对PortableDeviceApiLib.dll和WpdPack.dll的引用。确保在引用属性中,"Embed Interop Types"选项设置为False,...

    (objective-c 自定义 NSDictionary 键类的注意事项)工程

    本篇文章将深入探讨这些注意事项,旨在帮助开发者更好地理解和使用自定义键来操作`NSDictionary`。 首先,`NSDictionary`要求键必须是不可变的,并且遵循`NSCopying`协议。这是因为`NSDictionary`会复制键以便内部...

    Spring Boot 线程池的创建、@Async 配置步骤及注意事项.docx

    本文将详细介绍如何在Spring Boot中创建线程池并配置`@Async`,以及需要注意的一些事项。 首先,我们需要在Spring Boot的主程序类上添加`@EnableAsync`注解,以启用异步方法的支持。例如: ```java import org....

    PowerDesigner与Eclipse同步开发

    - **2.1.2 注意事项** - 如果PowerDesigner中的模型被修改了,但没有同步到Eclipse项目中,那么Eclipse中的Java文件可能不会反映出这些更改。 **2.2 Eclipse同步至PowerDesigner** - **2.2.0 范围** - 当我们...

    使用临界区对象(CriticalSeciton)实现线程同步

    5. **注意事项** - 临界区对象不能跨进程共享,这意味着它只能用于同一进程内的线程同步。 - 确保每个线程在完成对临界区的操作后都正确离开,否则可能导致死锁。 - 避免长时间持有临界区,以免阻塞其他线程过久...

    spring boot中多线程开发的注意事项总结

    在Spring Boot中,多线程开发是提升应用性能和并发能力的重要手段。Spring Boot通过`TaskExecutor`接口提供了一种方便的方式来实现多线程和...理解并遵循这些注意事项将有助于构建健壮、高效的多线程Spring Boot应用。

Global site tag (gtag.js) - Google Analytics