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

📄 mythread2.java

📁 java课程的资料以及实验的代码
💻 JAVA
字号:
import java.io.*;
import java.util.*;

class Message
{
	String from;
	String message;
	
	public Message(String from,String message)
	{
		this.from = from;
		this.message = message;		
	}
}

class MyVector extends Vector
{
	BufferedReader standardTnput;
	static int counter;
	int instanceCounter;
	
	public MyVector()
	{
		super(1,1);
		standardTnput = new BufferedReader(new InputStreamReader(System.in));
	}
	
	//同步方法,确保不会两个线程实例同时写入信息
	synchronized void put()
	{
		try
		{
			System.out.println("\n请输入姓名以及发送的消息:");
			String from = standardTnput.readLine();
			String message = standardTnput.readLine();
			Message msg = new Message(from,message);
			this.addElement((Message)msg);
			counter++;
			notify();		
		}
		catch(Exception e){}
	}
	
	//同步方法,保证一个线程在写信息的时候,服务器线程不会读取这条信息
	synchronized void get()
	{
		//检查是否有新的信息,没有新信息就wait()
		while(instanceCounter>=counter)
		{
			try
			{
				wait();//当前线程实例进入等待状态[等待被notify()]	
			}	
			catch(InterruptedException e)
			{
				System.out.println("线程中断..."+e);
			}
		}
		
		Message msg = (Message)elementAt(counter-1);
		System.out.println(msg.from+":"+msg.message);
		instanceCounter++;
		
		this.notify();//通知另一线程结束wait状态
	}
}

//MyThread1负责从屏幕获得信息,并写入Vector
class MyThread1 implements Runnable
{
	MyVector myVector;
	
	public MyThread1(MyVector myVector)
	{
		this.myVector = myVector;
		new Thread(this).start();
	}
	
	public void run()
	{
		while(true)
		{
			myVector.put();//从屏幕获得信息	,写入向量
		}	
	}
}

class MyThread2 implements Runnable
{
	MyVector myVector;
	
	public MyThread2(MyVector myVector)
	{
		this.myVector = myVector;
		new Thread(this).start();
	}
	
	public void run()
	{
		while(true)
		{
			myVector.get();//向屏幕输出向量中的信息
		}	
	}
	
	//主方法
	public static void main(String[] args)
	{
		MyVector myVector = new MyVector();
		
		new MyThread1(myVector);
		new MyThread2(myVector);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -