首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程同步-打印到FIle

线程同步-打印到FIle
EN

Stack Overflow用户
提问于 2013-06-06 04:51:28
回答 1查看 836关注 0票数 1

我的程序中有两个线程,一个是“发件人”线程,一个是“接收者”线程。在两个线程中,在不同的时间,我需要写到一个文件。但是,我发现有时它们都是在写入文件的同时导致输入变得混乱。

在给定的时间里,程序是否只有一个线程写入文件?

在另一个线程:Thread Synchronization中,我被告知要使用同步块。然而,当我尝试实现这一点时,我在定义以下内容时会出现错误:

代码语言:javascript
复制
private final Object lock = new Object();

它最初说:

无法对非静态字段锁进行静态引用。

如果我把它改为静态的,它会说

方法sychronized(Object)未为SendThread类型定义。

synchronized(lock)是否需要在一个函数中,或者它可以只存在于一些代码中?

如果这个方法能帮助我当前的问题,我应该在哪里以及如何定义上面的内容?

我的代码结构如下:

代码语言:javascript
复制
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
            }
         }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 07:36:29

synchronized将代码块标记为只有在持有特定锁时才可执行。在Java中,您不能在任何地方插入代码,它必须在方法或初始化块中。

因此,您的问题不是多线程问题,而是一个基本的Java语法问题。

我想这能达到你的预期:

代码语言:javascript
复制
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
        }
    }
 }

然后在你的主旋律里:

代码语言:javascript
复制
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方法是相互排斥的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16953885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档