⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switchthread.java

📁 简易聊天
💻 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 + -