java - this关键字的概念和同步

标签 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 的对象作为参数传递,这本来可以在不创建构造函数的情况下直接完成

最佳答案

同步的目的是保护共享数据不被多个线程同时访问和修改,并确保一个线程所做的更改对其他线程可见。这个想法是,您可能有一些数据结构,例如 map 或列表或其他东西,并且您希望控制对其的访问,以便一次只有一个线程可以更改它。

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

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

关于java - this关键字的概念和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52997264/

相关文章:

java - 如何从代码中获取跟踪ID?

language-agnostic - "program to an interface"是什么意思?

java - OOP - 是否需要构造函数?

java - 具有不同名称的Spring json map元素要列出

java - 在 pmd 中排除不起作用

java - 下载文件时文件名问题中的空格

mysql - 使用 mysql 在 Express 中定义表

php - 想要从两个类中扩展一个 PHP 类,其中一个是抽象类

c# - C# 中的一个接口(interface)和两个实现类(代理)

java - 如何比较 float