2012-01-21 39 views
0

我有一个类存储几个字符串和整数。这些值正在我的程序中不断更新。多线程 - 对类成员变量的独占访问?

在同一个程序中,我也有一个简单的套接字服务器,它处理包含在我的类的对象中的数据的传入请求。由于服务器代码包含一个while(true)循环,我假设我需要将代码放在单独的线程中。否则一旦我进入这个循环,没有别的东西会被执行?然后,我会将对我的类的引用传递给服务器线程,以便可以获取值。

static ServerSocket socket1; 
static Socket connection; 

while (true) { 
    connection = socket1.accept(); 
    ... 
} 

无论如何,我想知道如果我要创建一个单独的服务器线程,那么我可能会遇到同步问题。当我的课程中遇到某些条件时,课程成员会更新。如果服务器当前正在更新,我不希望服务器能够读取这些值。我怎么能这样做呢?

+0

有什么问题吗?如果你有多个线程访问同一个变量,那么,是的,你需要锁定以防止比赛。 –

+0

我的问题是我如何去做这件事 –

+1

多线程同步是一个巨大的话题。我建议阅读完整的Java并发实践,http://jcip.net/ – Luis

回答

1

您可以实现runnable接口并将run循环写入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 
}