package com.bootdo.wang;
/**
* 线程同步:
* 1.方法同步
* 2.代码块同步
*/
public class ThreadSynchronization {
class Bank {
private int account = 10;
public int getAccount() {
return account;
}
/**
* 同步方法
*
* @param money
*/
public synchronized void saveAccount(int money) {
account += money;
}
/**
* 同步代码块
*
* @param money
*/
public void saveAccount1(int money) {
synchronized (this) {
account += money;
}
}
}
class NewThred implements Runnable {
private Bank bank;
public NewThred(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
bank.saveAccount1(1);
// bank.seveAccount(1);
System.out.println(Thread.currentThread().getName() + "-->第" + i + "次,账户余额:" + bank.getAccount());
}
}
}
public void useThread() {
Bank bank = new Bank();
NewThred newThred = new NewThred(bank);
System.out.println("线程1:");
Thread thread1 = new Thread(newThred);
thread1.start();
System.out.println("线程2:");
Thread thread2 = new Thread(newThred);
thread2.start();
}
public static void main(String[] args) {
ThreadSynchronization threadSynchronization = new ThreadSynchronization();
threadSynchronization.useThread();
}
}
输出:
线程1:
线程2:
Thread-0-->第0次,账户余额:11
Thread-1-->第0次,账户余额:13
Thread-0-->第1次,账户余额:13
Thread-1-->第1次,账户余额:14
Thread-0-->第2次,账户余额:15
Thread-1-->第2次,账户余额:16
Thread-0-->第3次,账户余额:17
Thread-1-->第3次,账户余额:18
Thread-0-->第4次,账户余额:19
Thread-1-->第4次,账户余额:20
Thread-0-->第5次,账户余额:21
Thread-1-->第5次,账户余额:22
Thread-0-->第6次,账户余额:23
Thread-1-->第6次,账户余额:24
Thread-0-->第7次,账户余额:25
Thread-1-->第7次,账户余额:26
Thread-0-->第8次,账户余额:27
Thread-1-->第8次,账户余额:28
Thread-0-->第9次,账户余额:29
Thread-1-->第9次,账户余额:30