Java使线程更新为变量

Java使线程更新为变量,java,multithreading,Java,Multithreading,我想有一个线程,它将更新其他类中的变量 比如说,我有一个整数,一个线程类,它有一个获取值的套接字,我想把这个值设置为我的整数 我有一个名为direction的en ENUM,它的值是向上、向下的 我有一个主类,它有一个方向变量 在那个主类中,我启动了一个线程,其中有一个套接字 该线程看起来像: import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.

我想有一个线程,它将更新其他类中的变量

比如说,我有一个整数,一个线程类,它有一个获取值的套接字,我想把这个值设置为我的整数

我有一个名为direction的en ENUM,它的值是向上、向下的 我有一个主类,它有一个方向变量 在那个主类中,我启动了一个线程,其中有一个套接字 该线程看起来像:

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
}