java多线程小例子

本文探讨了使用Java并发编程实现线程同步的过程,通过创建并启动多个线程,演示了如何利用`synchronized`关键字确保资源访问的正确性和一致性。展示了在没有同步的情况下可能出现的数据混乱,并对比了同步实现前后输出结果的差异。

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

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值