我有一个存储多个字符串和整数的类。我的程序不断更新这些值。
在同一个程序中,我还有一个简单的套接字服务器,它处理对我的类对象中包含的数据的传入请求。因为服务器代码包含while(true)
循环,所以我假设我需要将代码放在一个单独的线程中。否则一旦我进入这个循环,其他任何东西都不会执行?然后,我将对我的类的引用传递给服务器线程,以便可以获得值。
static ServerSocket socket1;
static Socket connection;
while (true) {
connection = socket1.accept();
...
}
无论如何,我想知道如果我要创建一个单独的服务器线程,那么我可能会遇到同步问题。当我的程序中满足某个条件时,类的成员会更新。如果服务器当前正在更新,我不希望服务器能够读取这些值。我怎么能这样做呢?
答案 0 :(得分:1)
您可以实现runnable接口并在run()方法中编写循环。
public class SocketClass implements Runnable {
// variables
// running the thread
public void run() {
while(true) {
// loop
}
}
}
在主线程中,您可以使用new Thread(...).start()
开始一个新线程。
SocketClass socket = new socketClass();
new Thread(socket).start();
然后您可以访问您的SocketClass,您可以在其中访问变量。在读取或更新数据时,您应该在类或您正在使用的对象上进行同步。
// in main thread
synchronized(socket) {
// read data
}
// in SocketClass
synchronized(this) {
// write data
}