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 的对象作为参数传递,这本来可以在不创建构造函数的情况下直接完成
最佳答案
同步的目的是保护共享数据不被多个线程同时访问和修改,并确保一个线程所做的更改对其他线程可见。这个想法是,您可能有一些数据结构,例如 map 或列表或其他东西,并且您希望控制对其的访问,以便一次只有一个线程可以更改它。
如果您想练习使用synchronized关键字,您可以识别一些需要控制访问的数据结构,并将其包装在一个对象中,在该对象的方法上使用synchronized关键字来保护那些访问该数据结构的方法。
不要在线程的方法上使用synchronized。在您想要防止并发线程访问的对象上使用它。
关于java - this关键字的概念和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52997264/