Понятие этого ключевого слова и Синхронизация - PullRequest
0 голосов
/ 25 октября 2018
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и использовал его для непосредственного вызова метода Фибоначчи.Какова цель этого ключевого слова?Зачем мне здесь (значимость) то же самое относится и к классу fib3?Зачем создавать конструктор класса fib2, а затем передавать объект fib1 в качестве аргумента, который можно было бы сделать напрямую, без создания конструктора

1 Ответ

0 голосов
/ 26 октября 2018

Точка синхронизации заключается в защите общих данных от одновременного доступа и изменения несколькими потоками, а также для обеспечения того, чтобы изменения, внесенные потоком, были видны другим потокам.Идея в том, что у вас может быть какая-то структура данных, например карта или список, или что-то в этом роде, и вы хотите контролировать доступ к ней, чтобы ее мог изменить только один поток за раз.

Если вы хотите попрактиковаться в использовании синхронизированного ключевого словаВы можете идентифицировать некоторую структуру данных, к которой вам нужно управлять доступом, и обернуть ее в объект, где вы используете ключевое слово synchronized в методах объекта для защиты тех методов, которые обращаются к структуре данных.

Не использовать синхронизированные методы потоков.Используйте его на объектах, которые вы хотите защитить от одновременных потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...