package com.knowledge.Test;
/**
* 继承Thread类
* @author job
*
*/
public class syn_gou extends Thread{
//余额
int yu;
//总金额
int count = 1000;
//每次索取金额
int getmoney = 200;
//run方法是Thread类的线程执行体
public void run(){
//实现同步(没有同步则每次线程取钱混乱)
synchronized(this){
//如果总金额大于等于所取金额向下执行
if(count >= getmoney){
//计算余额
yu = count - getmoney;
//改变取完后的金额
count = yu;
System.out.println(Thread.currentThread().getName()+"取钱余额:"+getmoney+"余额为:"+yu);
}else{
System.out.println("余额不足!");
}
}
}
}
package com.knowledge.Test;
/**
* 测试类
* @author job
*
*/
public class syn_test {
public static void main(String[] args){
//syn_gou类的实例
syn_gou s = new syn_gou();
//创建6条线程
Thread t = new Thread(s);
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
Thread t3 = new Thread(s);
Thread t4 = new Thread(s);
Thread t5 = new Thread(s);
//启动线程
t. start();
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
//启动的这6个线程具体先执行那个是系统内部来控制,在程序中我们不能控制
//具体那个先执行是看那个先抢占到cpu,先抢到的先执行。所以会出现测试结果中的
/*
Thread-1
Thread-3
Thread-2
Thread-5
Thread-4
也可以理解为随机的
*/
}
}
测试结果:
Thread-1取钱余额:200余额为:800
Thread-3取钱余额:200余额为:600
Thread-2取钱余额:200余额为:400
Thread-5取钱余额:200余额为:200
Thread-4取钱余额:200余额为:0
余额不足!
如果没有synchronized实现同步:
(有很多种不正确的结果这里只列出3种做参考)
Thread-1取钱余额:200余额为:800
Thread-3取钱余额:200余额为:600
Thread-5取钱余额:200余额为:400
Thread-2取钱余额:200余额为:200
Thread-6取钱余额:200余额为:0
Thread-4取钱余额:200余额为:-200
Thread-1取钱余额:200余额为:800
Thread-3取钱余额:200余额为:400
Thread-2取钱余额:200余额为:400
Thread-6取钱余额:200余额为:200
Thread-4取钱余额:200余额为:0
余额不足!
Thread-2取钱余额:200余额为:600
Thread-1取钱余额:200余额为:600
Thread-3取钱余额:200余额为:400
Thread-4取钱余额:200余额为:200
Thread-5取钱余额:200余额为:0
余额不足!
分享到:
相关推荐
java 多线程小例子 很方便 很实用
学习java多线程的经典例子,让你深刻了解java多线程编程。
java多线程的经典例子教程,精心整理的word文档。
很简单的一个java多线程例子,希望多大家有帮助
java一个多线程的经典例子java一个多线程的经典例子
java多线程编程详解 里面具有详细的沼泽实例。
java 多线程的一个例子java 多线程的一个例子java 多线程的一个例子java 多线程的一个例子
Java 多线程 订票 示例 线程安全 Demo 例子 经典
一个java多线程的例子.doc 一个java多线程的例子.doc
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
java 多线程例子
6个非常经典的java多线程实例!欢迎下载!!!
java多线程例子(1).pdf java多线程例子(1).pdf java多线程例子(1).pdf
描述java多线程的例子,可供进一步学习多线程的人参考
java 的小例子。多线程控制按钮移动。
java 多线程例子.doc java 多线程例子.doc
Java 多线程访问的经典例子,一个个代码 手动敲出,可以加深或理解 多线程访问 线程安全与同步的问题.
一个线程从A表读数据放入队列 N个线程从队列中取出...支持大数据量跑批,就是个例子,本来是公司发送促销邮件用的,欢迎提意见和建议。 运行DispatcherMain可以测试,库结构自己可以根据code随便改成父子表关系的就行
Java多线程下载的例子.doc Java多线程下载的例子.doc
一个小例子,有助于理解多线程的知识,一开始厨师做包子,够一百个则换顾客来吃,顾客吃光了再请厨师来做……简明易懂