Java 中的静态同步
同步是一种在尝试访问共享资源的多个线程之间建立协作的方式。它是可靠的线程交互所必需的,使用"synchronized"关键字完成。在这里,线程是一个大操作的小子进程。在本文中,我们将学习静态同步以及它们如何管理线程,以便它们能够高效工作。
多线程和静态同步
多线程
它是 Java 编程语言的一项功能,允许我们同时执行多个操作。在其中,操作被分成多个较小的部分,称为线程。每个线程执行一个独立的任务,而不会影响其他线程的性能。多线程的主要好处是可以最佳地利用 CPU 等资源,并提高分配操作的执行时间。
同步
线程以异步方式执行,因此无法预测它们将如何交互。有时,多个线程可能会尝试访问单个资源,然后就会出现问题,因为它可能会导致分配的任务产生错误的结果。此时,同步就会出现,并确保单个线程可以一次访问给定的资源。这是可能的,因为锁对象保护着同步区域。当一个线程进入该区域时,锁就会被分配给它,它在执行任务后会释放锁。在资源繁忙之前,其他线程会在队列中等待轮到它们。
静态同步:当我们使用这种类型的同步时,如果一个线程位于静态同步区域,则尝试访问该区域的所有其他线程都将被阻止。由于静态方法属于类,因此静态同步应用类级锁定。
语法
static synchronized returnType nameOfMethod( Type parameters) { // code }
returnType 可能是 void 或任何原始数据类型。
parameters 包含变量名称,后跟数据类型。
Java 中的静态同步程序
代码的工作
创建一个名为"Thrd"的类,并在其中定义一个名为"operation()"的静态同步方法以及一个参数。
现在,在此方法中,进行一个 for 循环,该循环将运行 4 次并增加给定的参数。此循环的 try 块将以指定的时间间隔(即 1000 毫秒)打印输出。
进一步,创建三个扩展"Thread"类的类。在这些类中,将参数传递给"operation()"方法。
最后,在主方法中为线程类创建三个对象,并使用内置方法"start()"执行它们。
示例
class Thrd { static synchronized void operation(int data) { for(int i = 1; i <= 4; i++) { System.out.println(data++); try { // 每次迭代间隔 1 秒 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[]) { // 创建线程类的对象 Thrd1 oprt1 = new Thrd1(); Thrd2 oprt2 = new Thrd2(); Thrd3 oprt3 = new Thrd3(); // 启动线程操作 oprt1.start(); oprt2.start(); oprt3.start(); } }
输出
1 2 3 4 10 11 12 13 5 6
我们已经讨论过,我们无法预测线程的执行顺序。在上面的输出中,第一个线程首先执行,然后是第三个,然后是第二个。每次运行代码时,我们都会得到不同的输出。
结论
在本文中,我们讨论了多线程最重要的主题之一。同步保证在给定时间只有一个线程可以执行操作,这意味着它推动线程按顺序执行代码块。