Java 静态同步化的应用

Java 静态同步化的应用

同步化是一种建立多个线程之间共享资源合作的方式。使用’synchronized’关键字来实现,它对于可靠的线程交互是必要的。在这里,线程是大操作的小子进程。在本文中,我们将学习静态同步化以及它们如何管理线程以便能够高效地工作。

多线程和静态同步化

多线程

它是Java编程语言的一个特性,使我们能够同时执行多个操作。在其中,操作被分为多个称为线程的小部分。每个线程执行独立的任务,而不影响其他线程的性能。多线程的主要好处是优化使用CPU等资源,并提高分配操作的执行时间。

同步化

线程以异步的方式执行,因此无法预测它们将如何交互。有时,多个线程可能尝试访问单个资源,这时会出现问题,因为这可能会导致分配任务的错误结果。在这种情况下,同步化来解决问题,并确保一次只能有一个线程访问给定的资源。这是由于保护同步区域的锁对象实现的。当一个线程进入该区域时,锁将被分配给它,并在执行任务后释放锁。在资源忙碌时,其他线程在队列中等待它们的轮到。

静态同步化:当我们使用这种类型的同步化时,如果一个线程在静态同步化区域内,试图访问此区域的所有其他线程将被阻塞。由于静态方法属于类,因此静态同步化适用于类级别的锁。

语法

static synchronized returnType nameOfMethod( Type parameters) {
    // code
}

returnType 可以是void或任何原始数据类型。

parameters 包含变量名称和数据类型。

在Java中的静态同步程序

代码的工作原理

  • 创建一个名为’Thrd’的类,并在其中定义一个静态同步方法’operation()’和一个参数。

  • 现在,在这个方法中,采用一个for循环,循环4次并递增给定的参数。该循环的try块将以指定的时间间隔即1000毫秒打印输出。

  • 进一步创建三个扩展’Thread’类的类。在这些类中将参数传递给’operation()’方法。

  • 最后,在main方法中,创建三个线程类的对象,并使用内置方法’start()’执行它们。

示例

class Thrd {
   static synchronized void operation(int data) {
      for(int i = 1; i <= 4; i++) {
         System.out.println(data++);   
         try {
            // each iteration performed with interval of 1 sec
            Thread.sleep(1000);   
         } catch(Exception exp){}   
      }
   }
}
class Thrd1 extends Thread {
   // thread number 1 
   public void run() {   
      Thrd.operation(1);   
   } 
}
class Thrd2 extends Thread {
   // thread number 2   
   public void run() {   
      Thrd.operation(5);   
   }
}
class Thrd3 extends Thread {
   // thread number 3
   public void run() {
      Thrd.operation(10);   
   }   
}   
public class ThrdExecution {
   public static void main(String args[]) {
      // creating object for thread class
      Thrd1 oprt1 = new Thrd1();   
      Thrd2 oprt2 = new Thrd2();  
      Thrd3 oprt3 = new Thrd3();
      // Starting the thread operation
      oprt1.start();   
      oprt2.start();  
      oprt3.start();
   }
}

输出

1
2
3
4
10
11
12
13
5
6

我们已经讨论过无法预测线程执行顺序的问题。在上面的输出中,第一个线程被首先执行,然后是第三个,接着是第二个。每次运行代码时,我们都会得到不同的输出。

结论

在本文中,我们讨论了多线程中最重要的一个主题。同步保证只有一个线程可以在给定时间执行操作,也就是它将线程推进来按顺序执行代码块。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程