package com.yli.thread.lock; public class SynchronizedTest { public static final int TOTAL_AMOUNT = 100000; public static void main(String[] args) { Bank2 bank = new Bank2("yli", TOTAL_AMOUNT); Bank2 targetBank = new Bank2("ylz", 0); System.out.println(Thread.currentThread().getName() + "=========>总额=" + (bank.getBalance() + targetBank.getBalance())); for (int i = 0; i < 20000; i++) { TransferBank2 transfer = new TransferBank2(bank, targetBank, 5); Thread thread = new Thread(transfer); thread.setName("Transfer-" + i); thread.start(); } } } class TransferBank2 implements Runnable { private Bank2 bank; private Bank2 targetBank; private int amount; public TransferBank2(Bank2 bank, Bank2 targetBank, int amount) { this.bank = bank; this.targetBank = targetBank; this.amount = amount; } @Override public void run() { this.bank.transferAccount(targetBank, amount); } } class Bank2 { private String name; private int balance; public Bank2(String name, int balance) { this.name = name; this.balance = balance; } /** * synchronized提供了隐式锁机制,与ReentrantLock的lock()+unlock()作用相同 * wait()+notifyAll()的机制与Condition.await() + Condition.singalAll()相同 * @param targetBank * @param amount */ public synchronized void transferAccount(Bank2 targetBank, int amount) { try { while (this.balance < amount) { this.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } this.balance -= amount; targetBank.balance += amount; int total = this.getBalance() + targetBank.getBalance(); System.out.println(Thread.currentThread().getName() + "=========>总额=" + total); if (total != SynchronizedTest.TOTAL_AMOUNT) { Thread.currentThread().interrupt(); try { throw new InterruptedException("================>转账错误,停止运行"); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public synchronized int getBalance() { return balance; } public void setBalance(int balance) { this.balance = balance; } }
相关推荐
.NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,...
Java线程及同步(synchronized)样例代码
java的线程同步机制synchronized关键字的理解_.docx
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
声明周期,旦置为nil之后就法做代码同步了。SyncData* data = id2data(obj, RELEASE);}}// @synchronized
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
线程同步(synchronized)1---马克-to-win java视频 java视频
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
线程同步(synchronized)2---马克-to-win java视频的介绍
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
NoHttp核心架构之多线程通信、线程安全、线程同步;synchronized锁,Lock锁;具体讲解请移步博客:http://blog.csdn.net/yanzhenjie1003/article/details/50992468