首页 > Java > java教程 > 正文

Java 中的静态同步

WBOY
发布: 2024-08-30 15:59:04
原创
806 人浏览过

如果实例的方法是同步的,那么线程的执行就会变成每个实例一个线程的执行,但是当同一个类的实例有多个时,就会出现一个问题,需要在类级别进行同步,以便只提供类的所有实例的一个锁,而不是在对象级别进行同步,这在 Java 中称为静态同步,可以通过两种方式执行,一种是使用静态同步方法,另一种是使用同步块静态方法中的代码。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法

语法如下:

synchronized static return_type class_name{}
登录后复制

其中返回类型是从类返回值的类型,class_name 是类的名称。

Java 中静态同步是如何工作的?

Java中类的每个实例都对该类的对象有一个锁。如果任何静态方法被同步,那么锁就不是在类的对象上,而是在类本身上。假设一个类有两个对象,分别称为 obj1 和 obj2,并且线程 t1 和 t2 正在对对象 obj1 进行操作。同样,线程 t3 和 t4 正在对象 obj2 上进行操作。如果代码块或方法被同步,则线程 t1 和 t2 之间不会存在干扰,因为线程 t1 和 t2 都引用具有单个锁的同一个对象 obj1。同样,线程 t3 和 t4 之间也不可能存在干扰,因为线程 t3 和 t4 都引用具有单个锁的同一个对象 obj2。

但是线程 t1 和 t3 之间可能存在干扰,因为线程 t1 和 t3 都使用不同的锁获取了不同的对象。同样,线程t2和t4之间也可能存在干扰,因为线程t2和t4都获得了具有不同锁的不同对象。我们不希望任何线程之间出现任何形式的干扰,这个问题可以通过使用 Java 中的静态同步来解决。当第一次加载类时,Java 虚拟机会创建类对象。第一次加载同一个类后,不会再加载该类。 Java 虚拟机为加载的每个类创建一个类的实例。这些类的实例称为对象,对象同步可以使用 Java 中的静态同步来完成。

在 Java 中实现静态同步的示例

以下是示例:

示例#1

演示 Java 静态同步的程序:

代码:

//a class called check is defined
class check
{
// a method called Line is define and only one thread will be able to access this method at once because it is synchronized
synchronized public void Line()
{
//a for loop is defined to loop from values 0 to 3
for (int r = 1; r <5; r++)
{
System.out.println(r);
try
{
Thread.sleep(390);
}
catch (Exception ex)
{
System.out.println(ex);
}
}
}
}
//a class called Trap is defend which extends a thread of the class
class Trap extends Thread
{
//a variable of the class check is defined
check line1;
//a constructor of the class trap is defined with check class variable
Trap(check line1)
{
this.line1 = line1;
}
//the standard run method is overridden
public void run()
{
line1.Line();
}
}
//a class called program is defined
public class program
{
//main method is called
public static void main(String[] args)
{
//an instance of the class check is defined
check object = new check();
// two threads of the class trap is created and they share the same object
Trap tra1 = new Trap(object);
Trap tra2 = new Trap(object);
//Beginning the execution of two threads
tra1.start();
tra2.start();
}
}
登录后复制

输出:

Java 中的静态同步

说明:在上面的程序中,定义了一个名为check的类。然后定义了一个名为 Line 的方法,并且由于它是同步的,因此一次只有一个线程能够访问该方法。然后定义一个 for 循环从值 0 到 3 循环。然后保护一个名为 Trap 的类,它扩展了该类的线程。然后定义了类check的一个变量。类陷阱的构造函数以检查类变量作为参数定义。然后标准运行方法被覆盖。然后定义一个名为program的类。然后调用main方法。然后定义类检查的实例。然后创建类陷阱的两个线程tra1和tra2,它们共享同一个对象。然后,两个线程tra1和tra2的执行以这样的方式开始:一个线程的执行不中断另一个线程的执行或者一个线程的执行不锁定另一个线程的执行。程序的输出如上面的快照所示。

Java 中静态同步的优点

有几个优点。他们是:

  • 使用Java中的静态同步可以解决数据不一致的问题。
  • 通过在Java中使用静态同步,一个对象在给定的时间点只能被一个线程访问。只能由一个线程访问的对象必须使用关键字synchronized声明。
  • Java中可以使用静态同步来管理不同线程和不同进程的并发。即两个或多个线程,或者两个或多个进程可以同时执行,确保一个线程不会锁定或中断其他线程的执行。

结论

在本教程中,我们通过定义了解 Java 中静态同步的概念、在 Java 中声明静态同步的语法、通过示例了解 Java 中静态同步的工作原理及其输出以及 Java 中静态同步的优点。

以上是Java 中的静态同步的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!