public class Test {
public static void main(String[] args) {
Competition c = new Competition()
Thread T = new Thread(c)
T.start()
}
}
class Competition implements Runnable{
int red = 0
int green = 0
int Speed [] = new int [2]
Competition(){
}
public void run(){
Random r = new Random()
for(int a= 0a<500a++){
for(int j = 0j<2j++){
Speed[j] = r.nextInt(2)
red = red + Speed[j]
Speed[j] = r.nextInt(2)
green = green + Speed[j]
}
System.out.println("red的速度为"+red)
System.out.println("green的速度为"+green)
while(red >=500 || green>=500){
if(red >=500){
System.out.println("red先抵达终点线")
}
if(green >= 500){
System.out.println("green先抵达终点线")
}
if(green ==500 &&red ==500 ){
System.out.println("两个同时到达")
}
return
}
}
/* if(red >green){
System.out.println("Redwin"+red)
}
if(red<green){
System.out.println("Greenwin"+green)
}
if(red == green){
System.out.println("equal")*/
}
}//给你个思路自己用swing画出来,这个小程序是把速度设为2红绿两只马先超过500这一线的获胜.如果要多人比赛开启线程就好
package testimport java.util.ArrayList
import java.util.Arrays
import java.util.Collections
import java.util.Comparator
import java.util.HashMap
import java.util.List
import java.util.Map
import java.util.Set
import java.util.SortedMap
import java.util.TreeMap
import sun.util.logging.resources.logging
/**
* 2010-1-17 下午03:08:52 Piaolj
*/
public class Racing implements Runnable {
String str
static Map horses = new TreeMap()// 定义一个全局的Map存放5个马的名字和时间
static int count = 0// 用于判断县城是否全部结束
static boolean flag = true// 后面用while(flag)判断count是否为0,如果有兴趣,可以起另外一个线程完成此任务
public Racing(String string) {
// TODO Auto-generated constructor stub
this.str = string
}
public static void main(String[] args) {
Racing ra1 = new Racing("No.1 Horse")
Racing ra2 = new Racing("No.2 Horse")
Racing ra3 = new Racing("No.3 Horse")
Racing ra4 = new Racing("No.4 Horse")
Racing ra5 = new Racing("No.5 Horse")
Racing checkingThread = new Racing("checkingThread")
Thread t1 = new Thread(ra1)
Thread t2 = new Thread(ra2)
Thread t3 = new Thread(ra3)
Thread t4 = new Thread(ra4)
Thread t5 = new Thread(ra5)
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
while (flag) {
if (count == 0)// 所有线程结束
{
flag = false
}
}
// 排序
List infoIds = new ArrayList(horses.entrySet())
Collections.sort(infoIds, new Comparator<Map.Entry>() {
public int compare(Map.Entry o1, Map.Entry o2) {// 定义了比较的规则,因为这里是按map的value排序的
Long tmp = Long.parseLong(o1.getValue().toString())
- Long.parseLong(o2.getValue().toString())
return tmp.intValue()
}
})
System.out.println("输出马的名次:")
System.out.println()
for (int i = 0i <infoIds.size()i++) {
String id = infoIds.get(i).toString()
System.out.println(id)
}
}
public void run() {
// TODO Auto-generated method stub
int CircuitLength = 1000
int breakpoint = 200
int tmpint = 200
long Withtime
count = count + 1// 执行了一个线程,正在执行的线程数加1
// System.out.println(Thread.currentThread().getId())
for (int i = 0i <CircuitLength + 1i++) {
long start = System.currentTimeMillis()
if (i == breakpoint) {
int sleeping = (int) (Math.random() * 5000)
try {
Thread.sleep(sleeping)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
breakpoint = breakpoint + tmpint
}
if (i == CircuitLength) {
System.out.print(str + "\t" + "\t")
long end = System.currentTimeMillis()
Withtime = (end - start)
System.out.println("With time is:\t" + Withtime)
// 当每匹马跑完将马的时间的马的名称放入map中
horses.put(str, Withtime)
}
}
count = count - 1// 执行完了一个线程,线程数减1
}
}
时间比较少,写的比较草,呵呵 加了点注释,要是有问题可以发短消息
输出结果:
No.4 Horse With time is: 888
No.3 Horse With time is: 3042
No.5 Horse With time is: 1921
No.2 Horse With time is: 4346
No.1 Horse With time is: 2831
输出马的名次:
No.4 Horse=888
No.5 Horse=1921
No.1 Horse=2831
No.3 Horse=3042
No.2 Horse=4346
cyclibarriar 就是栅栏,顾名思义:就是一个拦截的装置。多个线程start后,在栅栏处阻塞住,一般定义栅栏的时候会定义有多少个线程。比如定义为4个,那么有三个线程到栅栏处,就阻塞住,如果没有第四个,就会一直阻塞,知道启动第四个线程到栅栏处,所有的线程开始全部进行工作。有点像赛马的例子。所有的赛马一个一个到起点,然后到齐了,在开始跑。countdownlatch:初始化定义一个数字(整型),比如定义2,一个线程启动后在await处停止下来阻塞,调用一次countDown,会减一,知道countDown后变为0时的时候,线程才会继续进行工作,否则会一直阻塞。
自己写个赛马的程序,其实就什么都懂了。