我想知道是否允許線程訪問類 的實例,以便您可以對該類的某些成員/變量執行操作。這可以處理線程和阻塞隊列嗎?
例如,我有一個主線程和一個線程。 我給第二個線程訪問主類 的實例,所以我可以在x上執行一個操作。
但是,如果在將來某個時候我決定在主線程中執行x 操作?或者只是簡單閱讀x。如果另一個線程和主線程想要同時讀取x,該怎麼辦?
這是否可以通過我在我的代碼中構造的方式來完成嗎?
package test;
import java.lang.Thread;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
class AThread extends Thread {
Test test;
AThread(Test test) {
this.test = test;
}
BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
public void run() {
String msg;
while ((msg = queue.poll()) != null) {
// Process the message
//System.out.println(msg); //should print "hello"
if (msg.equals("up")) {
test.setX(test.getX()+1);
System.out.println(test.getX());
}
}
}
}
public class Test {
AThread aThread;
private int x = 5;
void setX(int x){
this.x = x;
}
int getX(){
return x;
}
Test() throws InterruptedException{
System.out.println("MainThread");
aThread = new AThread(this);
aThread.start();
while (true) {
aThread.queue.put("up");
}
}
public static void main(String[] args) throws InterruptedException {
new Test();
}
}
而且不只是成員「X」,也有可能是在課堂上「測試」,我會希望能夠在這樣的執行操作如讀/寫更多的成員。
這是一個好的結構嗎?如果不是,應該修正什麼?
對不起。 –
好,很好。現在,* test.setX(test.getX()+ 1)怎麼做;'與[blocking]隊列有關,特別是當'test'甚至從未被這樣的隊列使用過?這仍然是問題的關鍵,還是關於使用[阻塞]隊列是否改變線程工作原理的問題? – user2864740
我感覺這個問題屬於[Code Review](http://codereview.stackexchange.com/)。 –