Java线程简单同步

1.线程

import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

private static Account account = new Account();
public static void main(String[] args) {

    ExecutorService executor = Executors.newCachedThreadPool();                                                  
    for(int i = 0; i < 100; i++){
        executor.execute(new AddAPennyTask());
    }
    executor.shutdown();
    while(!executor.isTerminated());            

    System.out.println("总金额" + account.getBalance());
}

    public void run(){
        account.deposit(1);
    }
}
private static class Account{
    private Lock lock = new ReentrantLock();
    private int balance = 0;

    public int getBalance(){
        return balance;
    }

    public void deposit(int amount){    
        //临界区,balance是共享资源,由于getBalance和AddAPennyTask两个线程同时访问,所以打印出的结果会与期望值不同,因此需要线程同步      
        balance += amount;          
    }     
}

}
2.线程同步,同步方法
private static class Account{

private int balance = 0;

public int getBalance(){
    return balance;

}
//使用关键字synchronized实现线程的同步
//在执行一个线程时,其他线程会排队等候,该线程结束。
public synchronized void deposit(int amount){

    balance += amount;
  }

}
3.同步语句
public void deposit(int amount){

    sysnchronized(this){
            balance += amount;
    }

}
4.加锁同步
private static class Account{

    private int balance =0;
    private Lock lock = new ReentrantLock();

public int getBalance(){
    return balance;
}
public void deposite(int amount){
    lock.lock();
    balance += amount;
    lock.unlock;

猜你喜欢

转载自blog.csdn.net/sinat_38314794/article/details/70876911