无法执行同步线程
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()
看起来你弄乱了一些变量。尝试使用一些有意义的名称来代替 f
和 t
。 thread.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();
记住你的变量,因为它会导致这样的问题!
现在程序应该 运行 没有任何错误!
我尝试了教科书中有关同步线程的代码。 尝试按原样编写代码。但出现错误:
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()
看起来你弄乱了一些变量。尝试使用一些有意义的名称来代替 f
和 t
。 thread.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();
记住你的变量,因为它会导致这样的问题! 现在程序应该 运行 没有任何错误!