java扑克发牌程序_Java多线程实现扑克牌发牌程序实例
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多线程实现扑克牌发牌程序实例相关推荐
- 面向对象发牌程序python_Python面向对象编程扑克牌发牌程序,另含大量Python代码!...
Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小 ...
- java线程代码实现_Java 多线程代码实现讲解
作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...
- java简单小程序_Java简易登录注册小程序
这篇文章主要介绍了Java图形界面开发,简易登录注册小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的 ...
- java中thread实例_Java多线程并发执行demo代码实例
主类:MultiThread,执行并发类 package java8test; import java.util.ArrayList; import java.util.List; import ja ...
- java io密集型任务_Java 多线程(一):CPU密集型、IO密集型
一.CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬 ...
- java多线程同步 多窗口卖票实例_java多线程之火车售票系统模拟实例
1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; ...
- 发扑克牌java程序_Java实现简易扑克牌游戏
功能描述 1.创建扑克牌.包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王. 2.创建两个玩家.包括玩家id.姓名.手牌等集合,手牌为扑克牌的集合. 3.洗牌. ...
- java中抽牌程序_Java—— 随机抽取扑克牌游戏
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:李晓凯 * 完成日期:2015年 ...
- java同步与死锁_Java多线程 - 线程同步与死锁
一.线程同步 1)模拟多个用户同时从银行账户里面取钱 ● Account 类:银行账户类,里面有一些账户的基本信息,以及操作账户信息的方法 //模拟银行账户 classAccount {private ...
最新文章
- 二分法与简单遍历的效率比较
- saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)
- Qt开发MQTT(二) 之第三方QMQTT
- 『TensorFlow』SSD源码学习_其二:基于VGG的SSD网络前向架构
- 哔哩哔哩_哔哩哔哩,危!!!
- solr 修改端口号
- JS的手写TRIM函数
- Pytorch《LSTM模型》
- java在控制台输出空心正方形,菱形,空心菱形
- spring hibernate druid mysql_使用Spring4的JavaConfig整合Druid Hibernate4.3
- 一步一步理解日历calendar(一)
- 标签打印软件中Excel数据整理及导入
- PHP框架高级编程——应用Symfony、CakePHP
- gmap 支持python吗_在gmap中使用bokeh的python为for circle添加工具提示
- EA开发系列---技术指标的使用
- 美国短信怎么发?美国短信如何计费?
- 最值得期待的 5 个新特性解析JavaScript ES2021
- Linux文件写入读取与关闭(二)
- 【毕业设计/matlab系列】基于Matlab的立体视觉匹配算法实现【含Matlab源码】
- Matlab 应用GPU加速
热门文章
- 小白的markdown基础语法总结
- 密码工具:crunch的使用
- oracle元数据存储在表空间,oracle db中数据和元数据的概念
- OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码
- 2020 云原生 7 大趋势预测
- 服务器辐射大还是显示器辐射大,显示器一直被吐槽辐射大_液晶显示器_液晶显示器应用技术-中关村在线...
- 今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?
- Python,美国顶尖大学里最受欢迎的编程入门语言
- 分分合合分分,谷歌医疗走向大败退
- 王者荣耀10连胜,竟然也有人不相信,猎游大神带菜鸡玩家10连胜