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
余额不足!
分享到:
相关推荐
今天没事给大家写一个多线程例子 今天没事给大家写一个多线程例子
C# 多线程实例C# 多线程实例C# 多线程实例C# 多线程实例C# 多线程实例C# 多线程实例
Delphi API 串口通信 多线程例子.rar
excel vba 多线程 实例 excel vba 多线程 实例
简单多线程实例。简单多线程实例。简单多线程实例。简单多线程实例。简单多线程实例。
Delphi 三个多线程例子代码是个实例解压后即可运行,经过测试运行没有错误。大家放心下载
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行
Delphi中最简单的多线程例子 Delphi中最简单的多线程例子
大漠插件作者提供的易语言大漠多线程例子
VB多线程实例VB多线程实例VB多线程实例VB多线程实例
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)
Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar
易语言多线程简单实用例子分享。@小凡じ亦匿名。 。Tags:多线程。
一个使用SPcomm控件的串口的多线程例子。有源代码的。只作技术交流,只供参考!
多线程例子 演示多线程使用
BCB多线程实例. 多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例多线程实例 BCB多线程实例 BCB多线程实例BCB多线程实例
stm32单片机多线程实例
VB 多线程例子学习