题目是这样的:
用线程模拟竞拍过程
创建4条线程,代表4个人,设置线程名称分别为:(“匿名A”,“匿名B”,“匿名C”,“匿名D”)。
4个人一共可以竞拍8次,每次竞拍出的价为1-100(包含1和100)的随机数,每次出价需要3000ms,创建1个map集合<线程名,出价>将这四个人存入进去,
出价默认为0,开始竞价后将每个人每次出的价存放进去,竞拍结束后以每个人最后出价为准。将竞拍价最高的线程名和成交价打印出来
打印格式如下:
创建4条线程,代表4个人,设置线程名称分别为:(“匿名A”,“匿名B”,“匿名C”,“匿名D”)。
4个人一共可以竞拍8次,每次竞拍出的价为1-100(包含1和100)的随机数,每次出价需要3000ms,创建1个map集合<线程名,出价>将这四个人存入进去,
出价默认为0,开始竞价后将每个人每次出的价存放进去,竞拍结束后以每个人最后出价为准。将竞拍价最高的线程名和成交价打印出来
打印格式如下:
匿名A以98元的价格成交
想了好久不知道怎么用map存他们,原来可以吧map设为静态的就可以了,在线程中map是唯一的操作对象,所以对map加syn就可以了
多亏了贴吧的一个大神
代码如下:
package com.shi.SellTickets;
import java.util.HashMap;
import java.util.Map;
public class Main2 {
public static Map<String,Integer> map = new HashMap<>();
public static void main(String[] args) {
Thread t1 = new Thread(new Boss(),"Boss-A");
Thread t2 = new Thread(new Boss(),"Boss-B");
Thread t3 = new Thread(new Boss(),"Boss-C");
Thread t4 = new Thread(new Boss(),"Boss-D");
t1.start();
t2.start();
t3.start();
t4.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(String key:map.keySet()){
System.out.println(key+":"+map.get(key));
}
int max=0;
String name = null;
for(String key:map.keySet()){
if(map.get(key)>max)
max=map.get(key);
name=key;
}
System.out.println("the winner is:"+name+"and his price is:"+max);
}
}
class Boss implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<2;i++){
synchronized (new Main2().map) {
int price = (int)(Math.random()*100)+1;
new Main2().map.put(Thread.currentThread().getName()+(i+1), price);
}
Thread.yield();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}