Java--线程的互斥实现(两种方法)
来源:互联网 发布:上海松丰齿科骗局知乎 编辑:程序博客网 时间:2024/05/22 05:27
我们是利用synchronized的两种方法:声明一条语句或声明一个方法
方法——:同步语句,使用synchronized(对象)后面接语句即可
方法二 同步方法,使用synchronized(this){ 方法体 }
附方法一代码如下:
package AcountThread;public class Account {String name;private int balance;public String getName() {return name;}public int getBalance() {return balance;}public Account(String name) {this.name = name;this.balance = 0;}// 存钱public void put(int value) { // value为存入金额if (value > 0) {this.balance += value;}}// 取钱方法public double get(int value) {if (value > 0) {if (value < this.balance) {this.balance -= value;} else {value = this.balance; // 取走所有余额this.balance = 0;}}return value;}}
package AcountThread;public class FecthThread extends Thread {public Account account;public int value;public FecthThread(Account account, int value) {this.account = account;this.value = value;}public void run() {synchronized (account) { //拿锁对象// 查看余额double howmatch = this.account.getBalance();// 取钱double v = this.account.get(value);// 查看余额System.out.println(this.account.name + "账户:现有" + howmatch + ",取走"+ v + ",余额" + this.account.getBalance());} // 解锁对象}}
package AcountThread;public class SevaThread extends Thread {public Account account;public int value;public SevaThread(Account account, int value) {this.account = account;this.value = value;}public void run() {synchronized (account) {// 查看double howmatch = this.account.getBalance();// 存钱this.account.put(value);// 查看System.out.println(account.getName() + "账户:现有" + howmatch + ",存入"+ this.value + ",余额" + this.account.getBalance());;}}}package AcountThread;public class MainThread {public static void main(String[] args) {Account wang = new Account("wang");(new SevaThread(wang, 100)).start();// 匿名对象等价于SevaThred t1 = new // SevaThread(wang, // 100);t1.start();(new SevaThread(wang, 200)).start();(new FecthThread(wang, 300)).start();}}附方法一代码如下:package AcountThread.v2;public class Account {private String name;private int balance;public String getName() {return name;}public int getBalance() {return balance;}public Account(String name) {this.name = name;this.balance = 0;}// 存钱方法synchronized public void put(int value) { // value为存入金额if (value > 0) {double howmatch = balance; // 查看起初的金额this.balance += value;System.out.println(name + "账户:现有" + howmatch + ",存入" + value+ ",余额" + balance);;}}// 取钱方法synchronized public void get(int value) {int howmatch = balance; // 查看余额if (value > 0) {if (value < this.balance) {this.balance -= value; //} else {value = this.balance; // 取走所有余额this.balance = 0;}}System.out.println(name + "账户:现有" + howmatch + ",取走" + value + ",余额"+ balance);}}package AcountThread.v2;public class FecthThread extends Thread {public Account account;public int value;public FecthThread(Account account, int value) {this.account = account;this.value = value;}public void run() {// 取钱this.account.get(value);}}package AcountThread.v2;public class SevaThread extends Thread {public Account account;public int value;public SevaThread(Account account, int value) {this.account = account;this.value = value;}public void run() {// 存钱this.account.put(value);}}package AcountThread.v2;public class MainThread {public static void main(String[] args) {Account wang = new Account("wang");(new SevaThread(wang, 100)).start(); // 匿名对象等价于SevaThred t1 = new // SevaThread(wang, // 100);t1.start();(new SevaThread(wang, 200)).start();(new FecthThread(wang, 300)).start();}}
阅读全文
0 0
- Java--线程的互斥实现(两种方法)
- Java线程的两种实现方法
- java两种实现线程的方法
- 浅谈两种方法实现进程互斥的原理
- JAVA线程之一:实现一个线程的两种方法
- [Java]Java实现线程操作的两种方法
- JAVA的线程对象实现的两种方法
- 在Java中实现线程的两种方法
- java实现线程的两种方法有什么区别?
- java当中实现线程的两种方法
- JAVA中实现线程的两种方法
- java多线程㈠—实现线程的两种方法
- Java中线程实现的两种方法
- 两条线程的互斥合作
- 关于java synchronized修饰方法时实现线程互斥遇到的问题
- Java线程(一):传统线程的实现、互斥与通信
- Java线程的互斥
- Java线程的互斥
- 学习小结
- Python2和Python3切换方法
- 坚持#第183天~认真努力做好当下的事情,不要想太多了
- HDU1846Brave Game(巴什博弈模板题 博弈论)
- flex笔记
- Java--线程的互斥实现(两种方法)
- java基础篇(十四)——代码块
- Ubuntu安装rpm
- 认识UART接口
- 前端框架---backbone.js之个人愚见
- zzuli-oj1002
- 黑与白
- java文件相关工具
- Hibernate(四)一对多映射