📄 mythread2.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 + -