我的程序中有两个线程,一个是“发件人”线程,一个是“接收者”线程。在两个线程中,在不同的时间,我需要写到一个文件。但是,我发现有时它们都是在写入文件的同时导致输入变得混乱。
在给定的时间里,程序是否只有一个线程写入文件?
在另一个线程:Thread Synchronization中,我被告知要使用同步块。然而,当我尝试实现这一点时,我在定义以下内容时会出现错误:
private final Object lock = new Object();它最初说:
无法对非静态字段锁进行静态引用。
如果我把它改为静态的,它会说
方法
sychronized(Object)未为SendThread类型定义。
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
}
}
}发布于 2013-06-06 07:36:29
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方法是相互排斥的。
https://stackoverflow.com/questions/16953885
复制相似问题