[英]Thread Synchronization - Printing to a FIle
我的程序中有兩個線程,一個“Sender”和“Receiver”線程。 在不同時間的兩個線程中,我需要寫入一個文件。 但是,我發現有時他們都在同時寫入文件導致輸入變得混亂。
有沒有辦法讓程序在給定時間只有一個線程寫入文件?
在另一個線程: 線程同步 ,我被告知使用同步塊。 但是,當我嘗試實現這個時,我得到的錯誤是我如何定義:
private final Object lock = new Object();
它最初說:
無法對非靜態字段鎖進行靜態引用
如果我將它改為靜態,那就說
對於
SendThread
類型,未定義SendThread
sychronized(Object)
方法。
synchronized(lock)
是否需要在函數內部,還是只能在某些代碼周圍?
如果這種方法有助於我當前的問題,我應該在哪里以及如何定義上述內容?
我的代碼結構如下:
public class my_main_class{
private final static Object lock = new Object();
public static void main (String[] args) throws Exception{
class SendThread implements Runnable {
synchronized (lock){
// contains code to print to text file
}
}
class ReceiveThread implements Runnable {
synchronized (lock){
// contains code to print to text file
}
}
}
synchronized
將一段代碼標記為僅在持有特定鎖時可執行。 在Java中,您無法在任何地方插入代碼,它必須位於方法或初始化塊中。
所以你的問題不是多線程問題,而是基本的Java語法問題。
我想這可以達到你的預期:
class SendThread implements Runnable {
public void run() {
synchronized (lock){
// contains code to print to text file
}
}
}
class ReceiveThread implements Runnable {
public void run() {
synchronized (lock){
// contains code to print to text file
}
}
}
然后在你的主要:
private final static Object lock = new Object();
public static void main (String[] args) throws Exception{
Runnable send = new SendThread();
Runnable recv = new ReceiveThread();
new Thread(send).start();
new Thread(recv).start();
}
我不知道這些方法應該做什么,所以它可能不是正確的設計,但至少它編譯並且兩個run
方法是互斥的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.