@线程:
线程安全:所谓的线程安全,就是要控制多个线程对某个资源的有序访问和修改。
保证线程安全的方法:
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