📄 switchthread.java
字号:
import java.io.*;
import java.net.*;
import java.util.LinkedList;
import java.util.Hashtable;
import java.util.HashSet;
import java.util.Iterator;
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class SwitchThread implements Runnable{
private LinkedList ONingQueue;
private LinkedList OFFingQueue;
private LinkedList RealTimeMsgQueue;
private LinkedList NewPubMsgQueue;
private Hashtable CSThreads;
private HashSet CSThreadskeys;
private ServerThread serverthread;
public SwitchThread(){}
public SwitchThread(Hashtable CSThreads,HashSet CSThreadskeys){
this.CSThreads=CSThreads;
this.CSThreadskeys=CSThreadskeys;
ONingQueue=new LinkedList();
OFFingQueue=new LinkedList();
RealTimeMsgQueue=new LinkedList();
NewPubMsgQueue=new LinkedList();
}//public SwitchThread()
public void RealTimeMsgReceiver(Message msg){
System.out.println("in SwitchThread RealTimeMsgReceiver()");
synchronized(RealTimeMsgQueue){RealTimeMsgQueue.add(msg);}
System.out.println("in SwitchThread RealTimeMsgReceiver()\n即时信息已经添加到RealTimeMsgQueue");
}//public void RealTimeMsgReceiver(Message msg)
public void OffUserReceiver(User offuser){
synchronized(OFFingQueue){OFFingQueue.add(offuser);}
}//public void OffUserreceiver(User ofuser)
public void PubMsgReceiver(PublicMessage PubMsg){
NewPubMsgQueue.add(PubMsg);
}//public void PubMsgReceiver(PublicMessage PubMsg)
public void OnUserReceiver(User onuser){
ONingQueue.add(onuser);
}//public void OnUserreceiver(User onuser)
public void UserInfoModifyReceiver(User NewUserInfo){
System.out.println("in UserInfoModifyReceiver(User NewUserInfo)");
ONingQueue.add(NewUserInfo);
System.out.println("用户NewUserInfo已经添加到ONingQueue");
}//public void UserInfoModifyReceiver(User NewUserInfo)
public void run(){
//User tempUser;
//Message tempmsg;
//PublicMessage tempPubMsg;
//Iterator tempForeach;
//String temphashkey;
//以上无变量移到Timer的内部类中,最为内部类的域
System.out.println("SwitchThread staring");
//while(true){
//}//while(true)
//下面的Timer事件监听器ActionListener()中的代码原来是在//while(true){}中的
Timer switchTimer =new Timer(500,new ActionListener(){
User tempUser;
Message tempmsg;
PublicMessage tempPubMsg;
Iterator tempForeach;
String temphashkey;
public void actionPerformed(ActionEvent evt){
System.out.println("in switchThread Timer");
for(;RealTimeMsgQueue.size()>0;){
System.out.println("in SwitchThread run() 准备传输即时信息");
tempmsg=(Message)RealTimeMsgQueue.poll();
temphashkey=tempmsg.gettoName();
serverthread=(ServerThread)CSThreads.get(temphashkey);
if(serverthread==null) continue;
System.out.println("in SwitchThread run()即时信息准备成功交付对应serverthread");
serverthread.RealTimeMsgReceiver(tempmsg);
System.out.println("in SwitchThread run()即时信息已经成功交付对应serverthread");
}//for(;RealTimeMsgQueue.size()>0;)
//CSThreadskeys=new HashSet(CSThreads.keySet());
//tempForeach=CSThreadskeys.iterator();
//for(;tempForeach.hasNext();){
// temphashkey=(String)tempForeach.next();
// serverthread=(ServerThread)CSThreads.get(temphashkey);
// if(serverthread==null) {continue;}
CSThreadskeys=new HashSet(CSThreads.keySet());
//System.out.println("CSThreads.size()="+CSThreads.size());
//System.out.println("CSThreadskeys.size()="+CSThreadskeys.size());
for(;ONingQueue.size()>0;){
tempUser=(User)ONingQueue.poll();
tempForeach=CSThreadskeys.iterator();
for(;tempForeach.hasNext();){
temphashkey=(String)tempForeach.next();
serverthread=(ServerThread)CSThreads.get(temphashkey);
if(serverthread==null) {continue;}
serverthread.OnUserReceiver(tempUser);
}//for(;tempForeach.hasNext();)
}//for(;ONingQueue.size()>0;)
CSThreadskeys=new HashSet(CSThreads.keySet());
for(;OFFingQueue.size()>0;){
tempUser=(User)OFFingQueue.poll();
tempForeach=CSThreadskeys.iterator();
for(;tempForeach.hasNext();){
temphashkey=(String)tempForeach.next();
serverthread=(ServerThread)CSThreads.get(temphashkey);
if(serverthread==null) {continue;}
serverthread.OffUserReceiver(tempUser);
}//for(;tempForeach.hasNext();)
}//for(;OFFingQueue.size()>0;)
CSThreadskeys=new HashSet(CSThreads.keySet());
for(;NewPubMsgQueue.size()>0;){
tempPubMsg=(PublicMessage)NewPubMsgQueue.poll();
tempForeach=CSThreadskeys.iterator();
for(;tempForeach.hasNext();){
temphashkey=(String)tempForeach.next();
serverthread=(ServerThread)CSThreads.get(temphashkey);
if(serverthread==null) {continue;}
serverthread.PubMsgReceiver(tempPubMsg);
}//for(;tempForeach.hasNext();)
}//for(;PublicMessage.size()>0;)
//}//for(;tempForeach.hasNext();)
}//public void actionPerformed()
});
switchTimer.start();
System.out.println("Timer starting");
}//public void run()
public static void main(String args[]){
new SwitchThread();
}//main()
}//class SwitchThread
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -