当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

<b>Java同步代码平等于断面</b>[Java编程]

赞助商链接



  本文“<b>Java同步代码平等于断面</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

同步常常作为断面被引用.断面是指一次只能有一个线程履行它.多个线程同时履行同步代码是有大概的.

这个曲解是因为很多程序员认为同步关键字锁住了它所包抄的代码.但是实际情形不是这样的.同步加锁的是对象,而不是代码.因此,假如你的类中有一个同步办法,这个办法可以被两个差别的线程同时履行,只要每个线程自己成立一个的该类的实例便可.

参考下面的代码:

class Foo extends Thread
{
 private int val;
 public Foo(int v)
 {
  val = v;
 }
 public synchronized void printVal(int v)
 {
  while(true)
   System.out.println(v);
 }
 public void run()
 {
  printVal(val);
 }
}
class SyncTest
{
 public static void main(String args[])
 {
  Foo f1 = new Foo(1);
  f1.start();
  Foo f2 = new Foo(3);
  f2.start();
 }
}

运行SyncTest产生的输出是1和3穿插的.假如printVal是断面,你看到的输出只能是1大概只能是3而不能是二者同时呈现.程序运行的后果证明两个线程都在并发的履行printVal办法,即便该办法是同步的并且由于是一个无限循环而没有终止.

要实现真正的断面,你必须同步一个全局对象大概对类举行同步.下面的代码给出了一个这样的典范.

class Foo extends Thread
{
 private int val;
 public Foo(int v)
 {
  val = v;
 }
 public void printVal(int v)
 {
  synchronized(Foo.class) {
   while(true)
    System.out.println(v);
  }
 }
 public void run()
 {
  printVal(val);
 }
}

上面的类不再对个别的类实例同步而是对类举行同步.关于类Foo而言,它只有唯一的类定义,两个线程在相同的锁上同步,因此只有一个线程可以履行printVal办法.

这个代码也可以通过对大众对象加锁.比方给Foo增添一个静态成员.两个办法都可以同步这个对象而到达线程安全.


  以上是“<b>Java同步代码平等于断面</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .