• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

多线程Thread Runable

发布: 2008-6-11 12:02 | 作者: 不详 | 来源: 希赛网 | 查看: 178次 | 进入软件测试论坛讨论

领测软件测试网

  在Java中有优先级别可以从1到10,其中1可以用Thread.MIN_PRIORITY表示,5可以用Thread.NORM_PRIORITY,10可以用    Thread.MAX_PRIORITY表示,新建一个线程默认的级别是Thread.NORM_PRIORITY。也可以使用setPriority方法改变线程的优先级别,如T1.setPriority(T2.getPriority + 1)。

  与yield方法相反的是join方法,它表示一直要等到指定的线程运行完毕,如:

  try{ t.join();} catch (InterruptedException ignored) { }

  表示要等到线程t运行完毕后,再执行下一步操作。这种情况比较少见。

  1.4 synchronized
  为了保证某个方法或者对象某个时刻只能被一个方法访问,那就需要使用synchronized关键字。

  如:

  public synchronized void countMe() {

        crucialValue += 1;

    }

  就表示countMe这个方法中的操作是一个原子操作,+= 要执行三个步骤,使用synchronized后,这三个步骤是具有原子性,即在三个步骤完成前,其它对于crucialValue的访问都将被拒绝,即可保证countMe的线程安全

  另一个例子:

synchronized(p) {    

   safeX = p.x();   

   safeY = p.y();   

}

  表示在block范围内锁定p对象,不许其它程序修改p对象中的值。

  以上代码的作用都是保护某个对象内的变量不能同时被多个线程访问,下面介绍如何保护class variable的线程安全:

public class StaticCounter {

    private static int crucialValue;

    public void countMe() {

        synchronized(getClass()) { 

            crucialValue += 1;      

        }    } }

  说明:

 (1) 在这个例子中,crucialValue是private并且static,这表示它可以被该类的所有实例访问;

 (2) synchronized使用getClass方法获取类名,而不能直接使用StaticCounter

 (3) 如果crucialValue是public的,那么修改代码成:

synchronized(Class.forName("StaticCounter")) {

    StaticCounter.crucialValue += 1;

}

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

44/4<1234

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网