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
我们已经讨论过无法预测线程执行顺序的问题。在上面的输出中,第一个线程被首先执行,然后是第三个,接着是第二个。每次运行代码时,我们都会得到不同的输出。
结论
在本文中,我们讨论了多线程中最重要的一个主题。同步保证只有一个线程可以在给定时间执行操作,也就是它将线程推进来按顺序执行代码块。