首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java编程教程-Java中的同步块

# Java中的同步块

同步块可以用于在方法的特定资源上执行同步。

假设我们的方法有50行代码,但我们只想在其中的5行进行同步,这种情况下我们可以使用同步块。如果我们将方法的所有代码都放在同步块中,它的工作方式与同步方法相同。

# 要记住的要点

同步块用于为任何共享资源锁定一个对象。

同步块的作用域小于方法。

Java的同步块不允许多个JVM访问共享资源,以提供访问控制。

由于synchronized关键字的工作速度较慢,系统性能可能会下降。

Java的同步块比Java的同步方法更高效。

# 语法

synchronized (object reference expression) { //代码块 }

# 同步块的简单示例

TestSynchronizedBlock1.java

class Table { void printTable(int n){ synchronized(this){//同步块 for(int i=1;i System.out.println(n*i); try{ Thread.sleep(400); }catch(Exception e){System.out.println(e);} } } }//方法结束 } class MyThread1 extends Thread{ Table t; MyThread1(Table t){ this.t=t; } public void run(){ t.printTable(5); } } class MyThread2 extends Thread{ Table t; MyThread2(Table t){ this.t=t; } public void run(){ t.printTable(100); } } public class TestSynchronizedBlock1{ public static void main(String args[]){ Table obj = new Table();//只有一个对象 MyThread1 t1=new MyThread1(obj); MyThread2 t2=new MyThread2(obj); t1.start(); t2.start(); } }

输出:

5 10 15 20 25 100 200 300 400 500

# 使用匿名类的同步块示例

TestSynchronizedBlock2.java

// 发送者类 class Sender { public void SenderMsg(String msg) { System.out.println("\nSending a Message: " + msg); try { Thread.sleep(800); } catch (Exception e) { System.out.println("Thread interrupted."); } System.out.println("\n" +msg+ "Sent"); } } // 用于使用线程发送消息的 Sender 类 class SenderWThreads extends Thread { private String msg; Sender sd; // Receiver 方法接收消息对象和要发送的消息 SenderWThreads(String m, Sender obj) { msg = m; sd = obj; } public void run() { // 检查一次是否只有一个线程发送消息 synchronized(sd) { // 同步发送者对象 sd.SenderMsg(msg); } } } // 驱动程序代码 public class ShynchronizedMultithreading { public static void main(String args[]) { Sender sender = new Sender(); SenderWThreads sender1 = new SenderWThreads( "Hola " , sender); SenderWThreads sender2 = new SenderWThreads( "Welcome to Javatpoint website ", sender); //启动两个SenderWThreads类型的线程 sender1.start(); sender2.start(); // 等待线程结束 try { sender1.join(); sender2.join(); } catch(Exception e) { System.out.println("Interrupted"); } } }

输出:

Sending a Message: Hola Hola SentSending a Message: Welcome to Javatpoint website Welcome to Javatpoint website Sent

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OlZNU9vWFBpnUNe1HTCEGucg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券