标签:
public class Thread extends Object implements Runnable
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
同步监视器,1,不可以是基本数据类型
2,可以是任意的引用数据类型,但是引用数据类型的引用是不可变花的,内容可以改变。
3,如果多个代码块使用了同一个监视器,一个里面进行了锁定,则其他的线程都不可以访问
package com.bj.thread1; public class Account { public int acount = 600; public int getAcount() { return this.acount; } public void getMoney(int mon) { this.acount = this.acount - mon; } } package com.bj.thread1; public class GetAcount implements Runnable { Account ac = new Account(); @Override public void run() { withdraw(); } public void withdraw() { synchronized (ac) { if (ac.getAcount() >= 400) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } ac.getMoney(400); System.out.println(Thread.currentThread().getName() + "取款成功,余额:" + ac.getAcount()); } else { System.out.println(Thread.currentThread().getName() + "取款不成功,余额不足,余额:" + ac.getAcount()); } } } } package com.bj.thread1; public class TestAccount { public static void main(String[] args) { GetAcount ga = new GetAcount(); Thread t1 = new Thread(ga, "张三"); Thread t2 = new Thread(ga, "李四"); t1.start(); t2.start(); } }
程序的运行结果是:
张三取款成功,余额:200
李四取款不成功,余额不足,余额:200
因为是多个线程操作同一个对象,所以要实现runnable接口。
因为有同步监视器锁,所以在张三执行线程run方法时,将锁锁住,只有张三执行玩线程的内容,才会把线程开放,可以让就绪中的其他线程抢到执行权。
synchroniezed不可以给run方法同步,会变成单线程
标签:
原文地址:http://www.cnblogs.com/xunzhengzhi/p/5593388.html