import java.util.*;

import java.awt.*;

import javax.swing.*;

public class CardBuffer                          //加互斥锁的缓冲区

{

private int value;

private boolean isEmpty=true;                //value是否空的信号量

private int order=0;                         //信号量,约定取牌线程的次序

synchronized void put(int i)

{

while (!isEmpty)                         //当value不空时,等待

try

{

this.wait();                    //等待

}

catch(InterruptedException e) {

}

value=i;                                 //当value空时,value获得值

isEmpty=false;                           //设置value为不空状态

notifyAll();                             //唤醒所有其他等待线程

}

synchronized int get(int order)              //order是取牌线程约定的次序

{

while (isEmpty || (this.order!=order))   //当value空或取牌次序不符时等待

try

{

this.wait();

}

catch(InterruptedException e) {

}

isEmpty=true;                            //设置value为空状态,并返回值

notifyAll();

this.order=(this.order+1)%4;             //加1使取牌次序轮转

return value;

}

}

/*

class Sender extends Thread                                //发牌线程类

{

private CardBuffer cardbuffer;

private int count;                                     //牌数

public Sender(CardBuffer cardbuffer,int count)

{

this.cardbuffer=cardbuffer;

this.count=count;

}

public void run()

{

for (int i=1; i<=this.count; i++)

cardbuffer.put(i);

}

}*/

class Receiver extends Thread                    //取牌线程类

{

private CardBuffer cardbuffer;

private JTextArea text;

private int order;                           //信号量,约定取牌线程的次序

public Receiver(CardBuffer cardbuffer,JTextArea text,int order)

{

this.cardbuffer = cardbuffer ;

this.text = text ;

this.order = order;

}

public void run()

{

while(true)

{

text.append(" "+cardbuffer.get(this.order));

try

{

Thread.sleep(100);

}

catch(InterruptedException e) {}

}

}

}

class CardJFrame extends JFrame

{

public CardJFrame()

{

super("发牌程序");

this.setSize(460,200);

this.setLocation(300,240);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

Container container=this.getContentPane();

container.setLayout(new GridLayout(3,3));          //3行3列网格布局

container.add(new JPanel());                       //网格布局的第1行第1列

JTextArea text[]=new JTextArea[4];                 //显示牌号的4个文本区

Font font=new Font("Helvetica", Font.PLAIN, 16);

for (int i=0; i

{

text[i]=new JTextArea();

text[i].setLineWrap(true);                     //设置文本区自动换行

text[i].setEditable(false);

text[i].setFont(font);

container.add(text[i]);

container.add(new JPanel());

}

this.setVisible(true);

CardBuffer cardbuffer = new CardBuffer();

Sender s = new Sender(cardbuffer,52);

s.setPriority(10);                                 //设置最高优先级

s.start();                                         //启动发牌线程

for (int i=0; i

(new Receiver(cardbuffer,text[i],i)).start();  //创建并启动4个取牌线程,优先级为5

}

public static void main(String arg[])

{

new CardJFrame();

}

}

//思修改发牌线程,发送由1~52组成的一个随机数序列。

//

class Sender extends Thread                                //发牌线程类

{

private CardBuffer cardbuffer;

private int count;                                     //牌数

private java.util.ArrayList list;             //数组列表

public Sender(CardBuffer cardbuffer,int count)

{

this.cardbuffer=cardbuffer;

this.count=count;

list=new ArrayList();

for (int i=1; i<=this.count; i++)

list.add(new Integer(i));                      //列表中添加整数对象

java.util.Random rand=new Random();                //随机数序列对象

java.util.Collections.shuffle(list, rand);         //将列表的数据序列打散,按随机数序列

}

public void run()

{

//        for (int i=1; i<=this.count; i++)

//            cardbuffer.put(((Integer)list.get(i-1)).intValue());

//或

Iterator it=list.iterator();              //返回一个迭代器对象

while (it.hasNext())                               //若有后继元素,使用迭代器遍历一个集合

cardbuffer.put((Integer)it.next());            //返回后继元素

}

}

作者:http://www.loverseo.com

java扑克发牌程序_Java多线程实现扑克牌发牌程序实例相关推荐

  1. 面向对象发牌程序python_Python面向对象编程扑克牌发牌程序,另含大量Python代码!...

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小 ...

  2. java线程代码实现_Java 多线程代码实现讲解

    作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...

  3. java简单小程序_Java简易登录注册小程序

    这篇文章主要介绍了Java图形界面开发,简易登录注册小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的 ...

  4. java中thread实例_Java多线程并发执行demo代码实例

    主类:MultiThread,执行并发类 package java8test; import java.util.ArrayList; import java.util.List; import ja ...

  5. java io密集型任务_Java 多线程(一):CPU密集型、IO密集型

    一.CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬 ...

  6. java多线程同步 多窗口卖票实例_java多线程之火车售票系统模拟实例

    1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; ...

  7. 发扑克牌java程序_Java实现简易扑克牌游戏

    功能描述 1.创建扑克牌.包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王. 2.创建两个玩家.包括玩家id.姓名.手牌等集合,手牌为扑克牌的集合. 3.洗牌. ...

  8. java中抽牌程序_Java—— 随机抽取扑克牌游戏

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:李晓凯 * 完成日期:2015年 ...

  9. java同步与死锁_Java多线程 - 线程同步与死锁

    一.线程同步 1)模拟多个用户同时从银行账户里面取钱 ● Account 类:银行账户类,里面有一些账户的基本信息,以及操作账户信息的方法 //模拟银行账户 classAccount {private ...

最新文章

  1. 二分法与简单遍历的效率比较
  2. saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)
  3. Qt开发MQTT(二) 之第三方QMQTT
  4. 『TensorFlow』SSD源码学习_其二:基于VGG的SSD网络前向架构
  5. 哔哩哔哩_哔哩哔哩,危!!!
  6. solr 修改端口号
  7. JS的手写TRIM函数
  8. Pytorch《LSTM模型》
  9. java在控制台输出空心正方形,菱形,空心菱形
  10. spring hibernate druid mysql_使用Spring4的JavaConfig整合Druid Hibernate4.3
  11. 一步一步理解日历calendar(一)
  12. 标签打印软件中Excel数据整理及导入
  13. PHP框架高级编程——应用Symfony、CakePHP
  14. gmap 支持python吗_在gmap中使用bokeh的python为for circle添加工具提示
  15. EA开发系列---技术指标的使用
  16. 美国短信怎么发?美国短信如何计费?
  17. 最值得期待的 5 个新特性解析JavaScript ES2021
  18. Linux文件写入读取与关闭(二)
  19. 【毕业设计/matlab系列】基于Matlab的立体视觉匹配算法实现【含Matlab源码】
  20. Matlab 应用GPU加速

热门文章

  1. 小白的markdown基础语法总结
  2. 密码工具:crunch的使用
  3. oracle元数据存储在表空间,oracle db中数据和元数据的概念
  4. OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码
  5. 2020 云原生 7 大趋势预测
  6. 服务器辐射大还是显示器辐射大,显示器一直被吐槽辐射大_液晶显示器_液晶显示器应用技术-中关村在线...
  7. 今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?
  8. Python,美国顶尖大学里最受欢迎的编程入门语言
  9. 分分合合分分,谷歌医疗走向大败退
  10. 王者荣耀10连胜,竟然也有人不相信,猎游大神带菜鸡玩家10连胜