Java采用 Theaker & Brookes 提出的消息传递算法 实现“下棋模型”

out.write(x);

}

public int receive() throws IOException {

return in.r

需要文中资料的朋友,可以加我\/信获取:vip1024b 备注Java

ead();

}

}

// 传递对象

class Turn {

int role = 0;

void turn() {

role = 1 - role;

}

}

// 模拟服务器响应 http 请求

class Watcher implements Runnable {

int role;

final Turn turn;

// 读请求,等待可执行条件,然后回复

MySocket socket;

public Watcher(int role, Turn turn, MySocket socket) {

this.role = role;

this.turn = turn;

this.socket = socket;

}

private String toRole(int r) {

return r == 0 ? “黑方” : “白方”;

}

@Override

public void run() {

// 如果到达流的末尾,则返回-1 。

while (true) {

// 受到客户端请求下棋的请求

try {

if (socket.receive() == -1) {

System.out.println(“通信结束”);

break;

}

} catch (IOException e) {

e.printStackTrace();

}

// System.out.println(“受到”+toRole(role)+“请求; 当前是”+toRole(turn.role)+“阶段”);

try {

synchronized (turn){

// 1 表示许可; 0 表示拒绝

if (role == turn.role) {

System.out.println("服务器 ———————— "+toRole(role)+“落子”);

socket.send(1);

// 更换角色

turn.turn();

} else {

socket.send(0);

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

class Judge {

MySocket blackSocket;

MySocket whiteSocket;

Turn turn = new Turn();

public Judge(MySocket blackSocket, MySocket whiteSocket) {

this.blackSocket = blackSocket;

this.whiteSocket = whiteSocket;

}

void serve() {

// 启动两个监听线程,相当于 BIO 了

new Thread(new Watcher(0, turn, blackSocket)).start();

new Thread(new Watcher(1, turn, whiteSocket)).start();

}

}

class Black implements Runnable {

MySocket socket;

public Black(MySocket socket) {

this.socket = socket;

}

void play() throws IOException {

// 模拟客户端发出请求的间隔

try {

TimeUnit.MILLISECONDS.sleep( (int)(Math.random()*1000));

} catch (InterruptedException e) {

e.printStackTrace();

}

// 发出请求

socket.send(1);

// 受到允许的通知 1 表示同意, 0 表示 拒绝

int x = socket.receive();

if (x == 1) {

// 模拟下棋

System.out.println(“客户端:黑方落子 ***”);

} else if (x == 0) {

// System.out.println(“黑方下棋被拒绝,现在是白方阶段!!!”);

} else {

System.out.println(“通信结束”);

}

}

@Override

public void run() {

while (true) {

try {

play();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

class White implements Runnable {

MySocket socket;

public White(MySocket socket) {

this.socket = socket;

}

Random random = new Random();

void play() throws IOException {

// 模拟客户端发出请求的间隔

try {

TimeUnit.MILLISECONDS.sleep( (int)(Math.random()*1000));

} catch (InterruptedException e) {

e.printStackTrace();

}

// 发出请求

socket.send(1);

// 受到允许的通知 1 表示同意, 0 表示 拒绝

int x = socket.receive();

if (x == 1) {

// 模拟下棋

System.out.println(“客户端:白方落子 ○○○”);

} else if (x == 0) {

// System.out.println(“白方下棋被拒绝,现在是黑方阶段!!!”);

} else {

System.out.println(“通信结束”);

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-F0qt4vXn-1716311056977)]

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-53xDNRwH-1716311056977)]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值