package com.lj.thread7;
public class FetchMoney
{
public static void main(String[] args)
{
Bank bank=new Bank();
Thread t1=new Thread(new MoneyThread(bank),"t1");
Thread t2=new Thread(new MoneyThread(bank),"t2");
t1.start();
t2.start();
//System.out.println(bank.getMoney());
}
}
class Bank{
private static Integer money=1000;
public int getMoney(){
return this.money;
}
public void changeMoney(int number) throws InterruptedException{
[b]synchronized [/b](money)
{
Thread.sleep(5000);
money+=number;
}
System.out.println("money= "+money);
}
public [b]synchronized [/b]int getMoney(int number) throws InterruptedException{
if(number<0){
return -1;
}
else if(number >money){
return -2;
}
else{
//模拟一下取款所用的时间
Thread.sleep(3000);
money-=number;
System.out.println("money= "+money+" by "+Thread.currentThread().getName());
return number;
}
}
}
class MoneyThread implements Runnable{
private Bank bank;
public MoneyThread(Bank bank)
{
this.bank = bank;
}
@Override
public void run()
{
try
{
//System.out.println(bank.getMoney(800));
bank.changeMoney(500);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这里分别用synchronized锁定了方法和变量对象。
两种方法都可以实现对对象的锁定, 然后让不同的线程有先后顺序的访问。
//等待编辑
分享到:
相关推荐
在Java多线程编程中,`synchronized`关键字是一个至关重要的工具,用于实现线程间的同步,以确保共享资源的安全访问。本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ##...
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。这个关键词提供了互斥锁机制,防止多个线程同时执行同一段代码,确保了线程安全。 一、`...
当`synchronized`作用于实例方法时,它锁定的是调用该方法的对象实例,这意味着在同一时间,只有一个线程可以执行该对象上的同步方法。如果存在多个对象实例,即使它们的同步方法相同,不同实例的同步方法也可以同时...
在Java编程语言中,`synchronized`关键字是一个非常重要的概念,它用于实现线程同步,以确保多线程环境下的数据一致性与安全性。本示例"java synchronized demo"旨在探讨`synchronized`关键字的用法及其作用机制。...
1. 对象实例范围:synchronized 关键字可以被用于对象实例的方法上,以防止多个线程同时访问同一个对象的 synchronized 方法。例如: ```java public class MyClass { public synchronized void myMethod() { // ....
- **解释**:线程`A`和线程`B`共享同一个`Thread1`实例`t1`,因此当线程`A`获取到`t1`的锁并执行`synchronized(this)`内的代码时,线程`B`将被阻塞,直到线程`A`释放锁。 2. **同步代码块与非同步代码块的访问** ...
- **synchronized代码块**:使用`{}`包围需要同步的代码,指定一个监视器(通常为对象实例或者类的Class对象),只有获得该监视器锁的线程才能执行这部分代码。 3. **同步机制与 Monitor** 在Java中,每个对象都...
2. 实现Runnable接口:创建一个实现了Runnable接口的类,并实现run()方法,然后将这个Runnable对象作为参数传递给Thread类的构造函数,创建Thread实例并启动。这种方式更灵活,因为Java不支持多重继承,但可以实现多...
下面我们将详细探讨Java初学者在220个实例中可能会遇到的知识点。 1. **基础语法**:包括变量声明、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、比较、逻辑、位操作等)、流程控制(如if-else、...
在Java语言中,支持多线程是一个核心特性,而`synchronized`就是用来控制并发线程对共享资源的访问,以保证数据的完整性。 当`synchronized`修饰一个类的公共方法时,例如在类A的func方法前使用,这意味着每次只有...
* 若此对象对应的类中包含了多个 synchronized 修饰的方法或代码块,多个线程访问同一个对象的任意 synchronized 修饰的方法或代码块,只要有一个线程拥有了 synchronized 同步锁,其他线程不管想访问 synchronized ...
每个实例都会提供一个具体的问题背景,通过代码实现来解释和演示如何应用这些高级概念,帮助开发者加深对Java语言的理解,提升编程技能。无论是初学者还是经验丰富的开发人员,都能从中受益匪浅。
这样,当一个线程进入`sale()`方法并获取锁之后,其他尝试调用`sale()`的线程必须等待,直到当前线程完成并释放锁。 2. **同步代码块**: 如果我们只想锁定代码的一部分,可以使用同步代码块,格式如下: ```...
Java中的`synchronized`关键字是用来解决多线程环境下的并发访问问题,确保共享资源在同一时间只能被一个线程访问,从而避免数据的不一致性。在Java中,`synchronized`可以应用于方法或者代码块,实现线程同步。 1....
每一个实例都是一个小型项目,可以帮助你将所学知识应用到实际问题中,提升编程实战经验。在学习过程中,建议先独立思考,然后对照实例的代码分析和理解,最后尝试修改和扩展实例,以深化理解和提高创新能力。
在Java编程语言中,`synchronized`是一个非常重要的关键字,它主要用于实现同步控制机制。通过使用`synchronized`,可以确保同一时刻只有一个线程能够访问被标记为同步的方法或代码块,从而避免多线程环境下的数据不...
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,确保数据的正确性和一致性。在Java中,同步可以应用于方法或代码块,为线程提供互斥访问,防止数据竞争问题。 1. **什么是`...
这意味着,如果两个线程分别使用不同的对象实例调用同一个同步方法,它们可以同时执行,因为它们各自持有不同的对象锁。然而,如果两个线程试图调用同一个对象的同步方法,那么只有一个线程能够进入方法,另一个线程...
Java synchronized同步锁可以保证同一时刻只有一个线程操作同一资源,使用wait()、notify()切换线程状态保证线程操作的前后顺序实现线程交互。 Java线程状态有五种:新建状态、就绪状态、运行状态、休眠状态和死亡...