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