同步技术:

在Java中,我们有两种类型的同步技术。
它们是同步方法和同步块。

1.同步方法:

如果任何方法是可用于线程数的,则通过使用关键字同步使该方法同步。

在Java中,我们有两种类型的同步方法。
它们是同步实例方法和同步的静态方法。

同步实例方法:如果普通实例方法使其同步,则将锁定相应类的对象。

语法:

synchronized <return type> method name (method parameters if any)
{
    Block of statements;
}

例如:

class Account {
    int bal = 0;
    synchronized void deposit(int amt) {
        bal = bal + amt;
        System.out.println("CURRENT BALANCE =" + bal);
    }
};

同步静态方法:如果普通的静态方法使其同步,则将锁定相应的类。

语法:

synchronized static <return type> method name (method parameters if any)
{
    Block of statements;
}

例如:

class Account {
    static int bal = 0;
    synchronized static void deposit(int amt) {
        bal = bal + amt;
        System.out.println("CURRENT BALANCE = " + bal);
    }
};

2.同步块:

这是获得同步概念而不是同步方法的替代技术。

当我们将非同步方法从基类或者接口继承到派生类中时,我们无法使继承方法同步。
因此,我们必须使用同步块。

语法:

synchronized (object of current class)
{
    Block of statement(s);
}

例如:

abstract class BankOp {
    abstract void deposit(int amt);//p a instance
};
class Account extends BankOp {
    int bal = 0;
    public void deposit(int amt) {
        synchronized (this)
            {
                bal = bal + amt;
                System.out.println("current value=" + bal);
            }
        }
    }

跨线程通信:

如果两个或者更多个线程正在交换数据,那么该通信被称为间线程通信。
在跨线程通信中;将一个线程的输出作为另一个线程的输入给出。
为了开发线程间通信应用程序,我们必须使用一个名为java.lang.Object的类

在java.lang.Object中的方法:

  • public void wait (long msec)
  • public void wait (long msec, int nanosec)
  • public void wait ()
  • public void notify ()
  • public void notifyAll ()

方法1和2用于使线程等待一段时间。
一旦等待时间自动超过,线程将来自等待状态到就绪状态。
方法3用于使线程在不指定等待时间的情况下等待。
方法4用于将单个等待线程带入就绪状态。
方法5用于使所有线程从等待状态带到就绪状态。

Java同步

同步是在将线程数量的线程中仅允许一个线程的过程进入该区域,该区域可用于执行写入操作。

如果有任何内容(数据成员或者方法或者对象或者类),则必须应用同步的概念。

让我们假设有一个可共享变量,称为余额,其初始值为零。
分别有两个线程T1和T2.
T1和T2希望与其各自的值I.,10和20同时更新余额变量。
完成这两个线程后,余额中的最终值为10或者20但不是30,这是不一致的结果。
要达到一致的结果,我们必须应用同步的概念。

当我们在上面的方案上应用同步概念时,当同时启动两个线程时,启动的第一线程有机会更新余额变量,其各自的值。
当第二线程尝试访问余额变量值JVM使第二个线程等待在第一个线程通过锁定平衡变量值完成其执行之前。
在完成第一个线程之后,余额中的值为10,第二个线程将被允许更新平衡变量值。
在完成第二个线程之后,余额的值为30,这是一致的结果。
因此,在同步锁定和解锁中,直到完成所有线程完成其执行。

日期:2020-04-11 23:04:29 来源:oir作者:oir