java synchronized没有起作用

问题描述

java synchronized没有起作用
package com.wxb.syn;

class Semaphore{}

public class BalanceTest extends Thread{
public static int balance = 100;
public Semaphore semp = new Semaphore();
public void run() {
synchronized(this){
// System.out.println(""balance="" + balance);
if(balance == 100) {
// try {
// sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
balance = balance - 100;
System.out.println(balance);
System.out.println(""withdraw 100 successful!"");
}else{
System.out.println(""failed"");
}
}

}public static void main(String[] args) {    BalanceTest bt = new BalanceTest();    bt.start();    BalanceTest bt2 = new BalanceTest();    bt2.start();    BalanceTest bt3 = new BalanceTest();    bt3.start();    BalanceTest bt4 = new BalanceTest();    bt4.start();    BalanceTest bt5 = new BalanceTest();    bt5.start();    BalanceTest bt6 = new BalanceTest();    bt6.start();}

}

不加sleep只有一个successful,加了之后都成功synchronized好像不起作用

解决方案

问题应该是出在这一句:synchronized(this)
搞个synchronized方法,run的时候调用它

时间: 2024-09-18 10:36:56

java synchronized没有起作用的相关文章

java synchronized详解

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.      一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块.      二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(th

java synchronized关键字的用法_java

0.先导的问题代码     下面的代码演示了一个计数器,两个线程同时对i进行累加的操作,各执行1000000次.我们期望的结果肯定是i=2000000.但是我们多次执行以后,会发现i的值永远小于2000000.这是因为,两个线程同时对i进行写入的时候,其中一个线程的结果会覆盖另外一个. public class AccountingSync implements Runnable { static int i = 0; public void increase() { i++; } @Overr

java synchronized用法详解_java

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块.

java synchronized关键字的用法

在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识.   java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法.   java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,

java的printf的作用是什么

问题描述 java的printf的作用是什么 System.out.printf(""%10s%10s | %10s%10s ""kilograms""pounds""pounds""kilograms"");比如这句,怎么理解,如果不用编写这句对程序影响大吗 解决方案 格式化输出,避免字符串拼接,同时可以控制tab制表符.数字保留多少小数等,这样写比较简单不用也可以. 解决方案二: 这

java中构造器的作用?

问题描述 java中构造器的作用? java中构造器的作用是什么?可以生动形象些解释吗?!(专业的术语不理解) 解决方案 1.创建java对象的重要途径. 2.对系统产生的对象初始化 3.并将该对象作为返回值返回,是外部程序可以访问. 解决方案二: http://baike.baidu.com/link?url=cxOmwyIsaR2Frw7XKdTbmE43s5EpVWHOwypDk7MBx_eb3THeMaXawPdEiwP8VcACKobuwuaYZQESU1Ah2TUKKq 简单讲,生孩

关于java中接口的作用

问题描述 关于java中接口的作用 java中接口有什么作用,新手,求教.为什么要写接口 我直接写实现的方法不就行了么 接口又有什么用 字典上解释接口时说系统中两个不同部分的链接的地方对吗 解决方案 你先要知道什么是接口,其次定义接口的作用,比如有一个类要实现好多方法,你不能让这个类继承所有的类去实现它里面的方法,因为java只支持单继承,当你用了接口以后,你可以在接口里面定义好那个类所需要的方法,然后让该类实现这个接口就可以,这样的话,就相当于你实现了一个类继承了多个类,而且在继承和接口中,还

大神解释一下java反射有什么作用?

问题描述 大神解释一下java反射有什么作用? 我疑问的地方就是,已经创建了类还有属性,为什么还要用复杂的反射去调用,直接创建 不好吗? 解决方案 比如说,eclipse这个软件是先开发好的,你的程序是后写的.为什么eclipse能给你类型的上下文关键字提示,当你输入一个对象,会有一个列表列出所有的对象的方法,这个就是靠的反射. 一个道理,eclipse上有很多插件,明显先有的eclipse后有的插件,那么 eclipse 怎么创建和调用这些插件呢?还是需要反射. 解决方案二: 简单来说两个作用

java语法-java中内部类的作用是神马

问题描述 java中内部类的作用是神马 java中内部类的作用是神马 java中内部类的作用是神马 java中内部类的作用是神马 解决方案 Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点. 内部类需要有外部类对象作为宿主的,它只能依存外部类而存在. 解决方案二: java中内部类的作用是神马不知道啊