package com.lpc.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class Poker {
private static int tager = 1;
private static String[] poker = { "黑桃A", "黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6",
"黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K", "红桃A", "红桃2",
"红桃3", "红桃4", "红桃5", "红桃6", "红桃7", "红桃8", "红桃9", "红桃10", "红桃J",
"红桃Q", "红桃K", "方块A", "方块2", "方块3", "方块4", "方块5", "方块6", "方块7",
"方块8", "方块9", "方块10", "方块J", "方块Q", "方块K", "梅花A", "梅花2", "梅花3",
"梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q",
"梅花K", "大王", "小王" };
private static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
for (String s : poker) {
list.add(s);
}
Collections.shuffle(list);
AtomicInteger synObj = new AtomicInteger(0);
TestPrint a = new TestPrint(synObj, "A", 0, list,new Call() {
@Override
public void result(List<String> list) {
System.out.println("A拿到的牌是"+list);
}
});
TestPrint b = new TestPrint(synObj, "B", 1, list,new Call() {
@Override
public void result(List<String> list) {
System.out.println("B拿到的牌是"+list);
}
});
TestPrint c = new TestPrint(synObj, "C", 2, list,new Call() {
@Override
public void result(List<String> list) {
System.out.println("C拿到的牌是"+list);
}
});
a.start();
b.start();
c.start();
}
}
interface Call{
public void result(List<String> list);
}
class TestPrint extends Thread {
private AtomicInteger synObj;
private String name;
private int flag;
private int count = 0;
private Call call;
private List<String> list;
private List<String> mylist = new ArrayList<String>();
public TestPrint(AtomicInteger synObj, String name, int flag,List<String> list,Call call) {
this.list = list;
this.synObj = synObj;
this.name = name;
this.flag = flag;
this.call = call;
}
@Override
public void run() {
while (true) {
synchronized (synObj) {
if (synObj.get() % 3 == flag) {
synObj.set(synObj.get() + 1);
System.out.println(name);
System.out.println(list);
if (list.size() > 0) {
System.out.println("拿到的牌是" + list.get(0));
mylist.add(list.get(0));
list.remove(0);
}
count++;
synObj.notifyAll();
// 起牌 起17次;
if (count == 17) {
call.result(mylist);
break;
}
} else {
try {
synObj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
分享斗地主的多线程实现的算法,为了理解多线程
最新推荐文章于 2021-08-04 21:49:06 发布