import java.util.*;
import java.lang.*;
class fib1 extends Thread
{ void fibonacci()
{
int n = 10, t1 = 0, t2 = 1;
System.out.println("First " + n + " terms: ");
for (int i = 1; i <= n; ++i)
{
System.out.print(t1 + " + ");
int sum = t1 + t2;
t1 = t2;
t2 = sum;
}
}
}
class fib2 extends Thread
{
fib1 f1;
fib2(fib1 f1)
{
this.f1=f1;
}
public synchronized void run()
{
f1.fibonacci();
}
}
class fib3 extends Thread
{
fib1 f1;
fib3(fib1 f1)
{
this.f1=f1;
}
public synchronized void run()
{
f1.fibonacci();
}
}
public class A extends Thread
{
public static void main(String[] args)
{
fib1 obj = new fib1();
fib2 a = new fib2(obj);
fib3 b = new fib3(obj);
a.start();
b.start();
}
}
我已经编写了斐波那契数列的代码,并实现了同步的概念,但是我不理解
的用法fib1 f1;
fib2(fib1 f1)
{
this.f1=f1;
}
public synchronized void run()
{
f1.fibonacci();
}
我本可以创建一个fib1类的对象,并使用它直接调用fibonacci方法。此关键字的目的是什么?为什么我需要在这里(重要性)与fib3类相同?为什么要创建fib2类的构造函数,然后将fib1对象作为参数直接传递而无需创建构造函数
答案 0 :(得分:0)
同步的目的是防止共享数据被多个线程同时访问和修改,并确保一个线程所做的更改对其他线程可见。这个想法是,您可能具有某种数据结构,例如地图或列表之类,并且您希望控制对它的访问,因此一次只能有一个线程可以更改它。
如果您想练习使用synced关键字,则可以标识一些需要控制访问权限的数据结构,并将其包装在一个对象中,在该对象中,您可以使用对象方法上的synced关键字来保护那些访问数据的方法。结构体。
不要在线程方法上使用同步。在要防止并发线程访问的对象上使用它。