i 绝望

依然

Miss Lang

java代码-----实现4个人打牌游戏的相关代码。线程

总结:发送线程Sender().和接收线程Receiver()

 

虽然,这里的Sender()发送线程和Receiver()都有相同的睡眠时间,但是由于线程调度的不确定性,是的发送线程Sender每次发送的数据和接收线程Receiver每次

接收的数据不一样。而我们希望的是发送线程每次发送的数据都能够让接收线程Receiver正确的接收 到,这就必须增加方法的锁定机制。

package com.a.b;

//package com.a.b;

class Buffer2 {// 这里注意java源文件不是Buffer.java(文件名)否则运行出错。根本无法显示
	private int value; // 这里java圆文件是任意的,但是绝对不是Buffer

	void put(int i) {
		value = i;
	}

	int get() {

		return value;// 返回值
	}

}

class Sender extends Thread {
	// 发送线程
	private Buffer bf;

	public Sender(Buffer bf) {
		this.bf = bf;

	}

	@Override
	public void run() {
		for (int i = 1; i < 6; i++) {
			bf.put(i);// 这个调用带参的put()方法
			System.out.println("Sender put:" + i);
			try {
				sleep(i);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		Buffer bf2 = new Buffer();// 这个和类名一致。否则报错
		(new Sender(bf2)).start();// 这里的Sender这个类的构造方法里本来就有个参数,、、我疑问为什么这里的构造方法
		// 调用线程的start()方法不是new一个线程的对象,而是一个类的,你看这个类不是继承了Thread类吗?也就是说它可以继承
		// 线程类的属性和方法---------是可以的
		(new Receiver(bf2)).start();// 这里的括号没有打上,那么它会调用的是什么方法呢?有什么关系呢?
	}

} // 这里不是类的对象吗:

class Receiver2 extends Thread {// 这是个类,和Sender是一样的?
	private Buffer bf;

	public Receiver2(Buffer bf) {
		this.bf = bf;

	}

	@Override
	public void run() {
		for (int i = 0; i < 6; i++) {
			System.out.println("\t\t Receiver get:" + bf.get());
			try {
				sleep(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

  

posted on 2013-12-23 23:01  juewang  阅读(1012)  评论(0编辑  收藏  举报

绝望依然

Miss Lang