首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java多线程小事例

2012-10-06 
java多线程小例子package com.knowledge.Test/**?* 继承Thread类?* @author job?*?*/public class syn_go

java多线程小例子

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
余额不足!

?

?

1 楼 toknowme 2011-12-07   楼主 对线程池了解吗?也可以写一个通俗易通的例子!给咱们看看~~

热点排行