无法执行同步线程



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

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()更难搞砸。

Thread类没有显示方法,而您的类First有显示方法。我想你打错了t.display((和f.start((。试着切换到f.display((

它会给您一个错误,可能是因为您没有使用'run(('函数上方的@Override注释。这是修改后的代码:

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

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

更改:

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

和:

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

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

最新更新