簡體   English   中英

線程同步 - 打印到文件夾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM