无法执行同步线程

问题描述 投票:0回答:1

我试着写了一段教科书上关于同步线程的代码。但是得到了错误。

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");
        }
    }
}
java java-threads
1个回答
0
投票

线程类没有显示方法,而你的类First有显示方法。我认为你打错了t.display()和f.start()。试着换成f.display()和t.start()。


3
投票

而不是做

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

试。

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

而在 run 试试 f.display() 而不是 t.display()

看起来你把一些变量搞乱了。试试用一些有意义的名字来代替 ft. 比较难搞 thread.start()first.display()t.start()f.display().


0
投票

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

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

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

变化。

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

还有:

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

记住你的变量,因为它会造成这样的问题!现在程序应该可以正常运行,不会出现任何错误了。

© www.soinside.com 2019 - 2024. All rights reserved.