@线程:
线程安全:所谓的线程安全,就是要控制多个线程对某个资源的有序访问和修改。
保证线程安全的方法:
1.synchronized关键字用于修饰方法体或者包裹代码快,保证在多线程环境下,未返回结果前只能够被一个线程操作。
public synchronized void count(){ } synchronized(lock){ 代码块 }
public volatile num = 0;
Lock lock = new ReentrantLock(); public void count(){ lock.lock();//取得锁 代码块 lock.unlock(); }
int num = 0; for(int i = 0;i<10;i++){ num+=1; }
package com.zhaofeng;
public class Bank {
private int balance;
public Bank(int balance) {
this.balance = balance;
}
public int getBalance() {
return balance;
}
public void add(int num) {
balance = balance + num;
}
public void out(int num) {
balance = balance - num;
}
public static void main(String[] args) throws InterruptedException {
Bank account = new Bank(1000);
Thread a = new Thread(new AddThread(account, 20000), "存款");
Thread b = new Thread(new OutThread(account, 10000), "取款");
a.start();
b.start();
a.join();
b.join();
System.out.println(account.getBalance());
}
static class AddThread implements Runnable {
Bank account;
int amount;
public AddThread(Bank account, int amount) {
this.account = account;
this.amount = amount;
}
public void run() {
for (int i = 0; i < amount; i++) {
account.add(1);
}
}
}
static class OutThread implements Runnable {
Bank account;
int amount;
public OutThread(Bank account, int amount) {
this.account = account;
this.amount = amount;
}
public void run() {
for (int i = 0; i < amount; i++) {
account.out(1);
}
}
}
} public synchronized void add(int num) {
balance = balance + num;
}
public synchronized void out(int num) {
balance = balance - num;
} 这样就保证了多线程的有序访问。
原文:http://blog.csdn.net/fengfeng91/article/details/18948575