import 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
import java.util.Randompublic 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这一线的获胜.如果要多人比赛开启线程就好
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)