`
qpshenggui
  • 浏览: 14158 次
  • 性别: Icon_minigender_1
  • 来自: 襄阳
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

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
0
分享到:
评论
1 楼 toknowme 2011-12-07  
楼主 对线程池了解吗?也可以写一个通俗易通的例子!给咱们看看~~

相关推荐

Global site tag (gtag.js) - Google Analytics