Java使线程更新为变量
我想有一个线程,它将更新其他类中的变量 比如说,我有一个整数,一个线程类,它有一个获取值的套接字,我想把这个值设置为我的整数 我有一个名为direction的en ENUM,它的值是向上、向下的 我有一个主类,它有一个方向变量 在那个主类中,我启动了一个线程,其中有一个套接字 该线程看起来像:Java使线程更新为变量,java,multithreading,Java,Multithreading,我想有一个线程,它将更新其他类中的变量 比如说,我有一个整数,一个线程类,它有一个获取值的套接字,我想把这个值设置为我的整数 我有一个名为direction的en ENUM,它的值是向上、向下的 我有一个主类,它有一个方向变量 在那个主类中,我启动了一个线程,其中有一个套接字 该线程看起来像: import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends Thread {
private ServerSocket serverSocket;
DataInputStream in;
volatile direction dir;
public Server(int port,direction d) throws IOException {
serverSocket = new ServerSocket(port);
Socket server = serverSocket.accept();
in = new DataInputStream(server.getInputStream());
dir=d;
}
public void run() {
int recieved;
while (true) {
try {
recieved = in.readInt();
while (recieved != -1) {
dir = direction.fromInt(recieved);
recieved = in.readInt();
System.out.println(dir);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public direction getDirection() {
return dir;
}
}
我希望主类中的direction变量从thread类更新
Socket socket = new Socket("myhost", myport);
DataInputStream dis = new DataInputStream(socket.getInputStream());
// read your value
int val = dis.readInt();
myClass.setValue(val);
在类中,使用可变整数
private volatile int value;
public void setValue(int val)
{
value = val;
}
确保线程具有指向类实例的指针。例如,使用构造函数执行此操作。基于您发布的代码,您实际上不需要执行任何操作,只需读取变量(因为它在服务器中是可变的):
现在,如果您的问题是:我可以让main在到达服务器对象时获取
dir
的各种值吗?例如,您可以使用BlockingQueue
来处理通信。在服务器类中,声明队列(并删除dir
成员):
您的getDirection
方法可以重命名为getNextDirection
:
public Direction getNextDirection() throws InterruptedException {
queue.take();
}
然后,您的主视图可以如下所示:
while (true) {
Direction nextDirection = server.getNextDirection()
//do something with the new direction
}
注意:为了遵守Java命名约定,我已将enum
Direction
重命名为Direction
。您尝试了什么?什么不起作用?持有整数的类的代码是什么样子的?换句话说,你需要更具体一些,这并不重要。根据我在这里写的,试试看。只需确保线程有一个指向类的指针。出于某种原因,我尝试将套接字连接到端口80…但当我更改端口时,它成功了!谢谢
Direction dir = Direction.fromInt(recieved);
queue.put(dir);
public Direction getNextDirection() throws InterruptedException {
queue.take();
}
while (true) {
Direction nextDirection = server.getNextDirection()
//do something with the new direction
}