此关键字的概念和同步

时间:2018-10-25 20:04:45

标签: java oop

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对象作为参数直接传递而无需创建构造函数

1 个答案:

答案 0 :(得分:0)

同步的目的是防止共享数据被多个线程同时访问和修改,并确保一个线程所做的更改对其他线程可见。这个想法是,您可能具有某种数据结构,例如地图或列表之类,并且您希望控制对它的访问,因此一次只能有一个线程可以更改它。

如果您想练习使用synced关键字,则可以标识一些需要控制访问权限的数据结构,并将其包装在一个对象中,在该对象中,您可以使用对象方法上的synced关键字来保护那些访问数据的方法。结构体。

不要在线程方法上使用同步。在要防止并发线程访问的对象上使用它。