##目的:支线程接受 socket,打断主函数的输入
支线程与主线程并行,支线程等待 Serversocket.accept(),主线程等待 Scanner.next().
现在希望支线程接收 Socket 后,中断主线程输入,继续执行支线程之后内容
##目前
需要的是 lock.wait 在同步代码块外,但是这样语法错误
如果在同步代码块中它一直执行主函数的等待输入
##主线程
Server server = new Server();
server.initServer(LockServer);
server.start();
synchronized (LockClick) {
synchronized (LockServer){
while (true) {
Menu.printMenu();
Menu.scan(LockClick,LockServer);//看作 Scanner.next()
System.out.println("----------------");
}
}}
##支线程
public void run(){
PrintWriter out=null;
Scanner get = null;
try {
System.out.println("服务正在运行,等待客户端连接!");
log.write("点对点服务端开启");
while (true) {
Socket client = server.accept();
//接收 socket,打断主线程输入
//lock.wait();
synchronized (lock) {
lock.wait();
InetAddress inetAddress = client.getInetAddress();
具体代码:https://github.com/0x00stone/chat/blob/master/src/Client1/mainThread.java https://github.com/0x00stone/chat/blob/master/src/Client1/Server.java
1
PUGE 2021-01-06 11:24:49 +08:00
wait ()必须放到 while 循环内,因为可能有虚假唤醒的可能,你这写法很容易死循环啊,推荐用 2 个 semaphore 来做,而且感觉你这需求有点不太对
|