线程同步与线程调度初探_发牌功能
来源:互联网 发布:澳洲排油丸 知乎 编辑:程序博客网 时间:2024/06/15 20:32
问题:一个发牌线程和四个取牌线程间的两种同步问题
首先确定一个缓存区,去放一张牌,并设置一个信号量
class CardBuffer {private int value;private boolean isEmpty=true;private int order=0;private int number;CardBuffer(int number){ this.number=number;}synchronized void put(int i){while(!this.isEmpty)try{ this.wait();}catch(InterruptedException ex){}this.value=i;this.isEmpty=false;this.notifyAll();}synchronized int get(int order){ //同步锁while(this.isEmpty||(this.order!=order))try{this.wait();}catch(InterruptedException ex){}this.isEmpty=true;this.notifyAll();this.order=(this.order+1)%this.number;return this.value;}}然后确定一个发牌线程,每一发出一张牌
class SendCardThread extends Thread{private CardBuffer cardbuffer;private int cardMax;private int number;public SendCardThread(CardBuffer cardbuffer,int cardMax,int number){this.cardbuffer=cardbuffer;this.cardMax=cardMax;this.number=number;this.setPriority(Thread.MAX_PRIORITY);}public void run(){for(int i=1;i<this.cardMax;i++){this.cardbuffer.put(i);}for(int i=1;i<this.number;i++)this.cardbuffer.put(-1);}}
确定取牌线程,要考虑到多种情况
class ReceiveCardJFrame extends JFrame implements Runnable{private CardBuffer cardbuffer;private JTextArea text;private int order;public ReceiveCardJFrame(CardBuffer cardbuffer,int order,String title,int x,int y){super(title);this.setBounds(x, y, 250, 100);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.order=order;this.cardbuffer=cardbuffer;this.text=new JTextArea();this.getContentPane().add(this.text);this.text.setLineWrap(true);this.text.setEditable(false);this.text.setFont(new Font("Arial",Font.PLAIN,20));this.setVisible(true);new Thread(this).start();}public void run(){while(true){int value=this.cardbuffer.get(this.order);if(value==-1)return;this.text.append(String.format("%4d",value));try{Thread.sleep(1000);}catch(InterruptedException ex){}}}}
程序结果如图
阅读全文
0 0
- 线程同步与线程调度初探_发牌功能
- java学习初探十八之线程的调度与控制_优先级
- java学习初探十八之线程的调度与控制_让位yield_合并jion
- 【初探】进程通信与线程同步
- LINUX线程同步初探
- 线程的状态、调度及线程的同步与锁
- 11.6 线程_线程同步
- Java线程_(二)线程同步与锁
- 05_线程同步
- 多线程_线程同步
- [Java]_[线程同步]
- java学习初探十八之线程的线程同步_锁机制_synchronized
- Python 线程调度(Condition),线程同步
- 线程属性_实时调度
- 线程同步与线程安全
- 线程同步与线程安全
- Java线程的学习_线程同步
- Java线程_线程调度之线程池
- margin的具体用法
- JQuery之$('<div>')
- 217. Contains Duplicate(第八周)
- CentOS 7 安装 RabbitMQ
- PAT乙级题1019.数字黑洞
- 线程同步与线程调度初探_发牌功能
- Python学习笔记——条件判断与循环
- highgui的拓展
- Android学习之属性动画基础
- Python Imaging Library: ImageQt Module(图像QT模块)
- C++ Primer Plus 课后编程练习——第六章 分支语句和逻辑运算符
- java io stream
- Reverse Integer算法题
- Threes