无法执行同步线程

Cannot execute Synchronised thread

我尝试了教科书中有关同步线程的代码。 尝试按原样编写代码。但出现错误:

cannot find symbol f.start(); and t.display();

教科书的代码本应该在没有synchronized关键字的情况下尝试的。 但似乎编译器无法识别该对象。 请帮忙..

class First 
{
    synchronized void display (String s)
    {
        System.out.println(s);

        try
        {
            Thread.sleep(1000);
        }
        catch(InterruptedException e)
        {
            System.out.println("Interrupted");  
        }
        System.out.println("***");
    }
}

class Second  implements Runnable 
{
    String s;
    First f;    
    Thread t;

    public Second(First f1,String s1)
    {
        f=f1;
        s=s1;
        t=new Thread(this);
        f.start();
    }

    public void run()
    {
        t.display(s);
    }
}

class SyncThread
{
    public static void main(String args[])
    {
        First f=new First();
        Second ob1=new Second(f,"First");
        Second ob2=new Second(f,"Second");
        Second ob3=new Second(f,"Third");

        try
        {
            ob1.t.join();
            ob2.t.join();
            ob3.t.join();
        }
        catch(InterruptedException e)
        {
            System.out.println("Interrupted");
        }
    }
}

而不是

t = new Thread(this);
f.start();

尝试:

t = new Thread(this);
t.start();

并在 run 方法中,尝试 f.display() 而不是 t.display()

看起来你弄乱了一些变量。尝试使用一些有意义的名称来代替 ftthread.start()first.display()t.start()f.display()更难搞砸。

线程 class 没有显示方法,而您的 class First 有显示方法。我认为您输入了错误的 t.display() 和 f.start()。尝试切换到 f.display() 和 t.start()。

它给你一个错误可能是因为你没有使用上面的@Override注解'run()'函数。 这是修改后的代码:

 @Override
public void run()
{
    f.display(s);
}

并且请不要 运行 构造函数中的线程,因为它不安全而且你犯了一个错误,因为它应该是 t.start() 而不是 f.start() , 运行() 中的类似变化 应该 f.display(s) 而不是 t.display(s).

变化:

@Override
public void run()
{
    f.display(s);
}

并且:

t=new Thread(this);
    t.start();

记住你的变量,因为它会导致这样的问题! 现在程序应该 运行 没有任何错误!