Java多线程程序设计初步

发表于:2010-11-08 10:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  线程的优先级

  对于多线程程序,每个线程的重要程度是不尽相同,如多个线程在等待获得CPU时间时,往往我们需要优先级高的线程优先抢占到CPU时间得以执行;又如多个线程交替执行时,优先级决定了级别高的线程得到CPU的次数多一些且时间多长一些;这样,高优先级的线程处理的任务效率就高一些。

  Java中线程的优先级从低到高以整数1~10表示,共分为10级,设置优先级是通过调用线程对象的setPriority()方法,如上例中,设置优先级的语句为:

  thread1 threadone=new thread1(); file://用Thread类的子类创建线程;

  Thread threadtwo=new Thread(new thread2()); file://用Runnable接口类的对象创建线程;

  threadone.setPriority(6); file://设置threadone的优先级6;

  threadtwo.setPriority(3); file://设置threadtwo的优先级3;

  threadone.start(); threadtwo.start(); file://strat()方法启动线程;

  这样,线程threadone将会优先于线程threadtwo执行,并将占有更多的CPU时间。该例中,优先级设置放在线程启动前,也可以在启动后进行设置,以满足不同的优先级需求。

  线程的(同步)控制

  一个Java程序的多线程之间可以共享数据。当线程以异步方式访问共享数据时,有时候是不安全的或者不和逻辑的。比如,同一时刻一个线程在读取数据,另外一个线程在处理数据,当处理数据的线程没有等到读取数据的线程读取完毕就去处理数据,必然得到错误的处理结果。这和我们前面提到的读取数据和处理数据并行多任务并不矛盾,这儿指的是处理数据的线程不能处理当前还没有读取结束的数据,但是可以处理其它的数据。

  如果我们采用多线程同步控制机制,等到第一个线程读取完数据,第二个线程才能处理该数据,就会避免错误。可见,线程同步是多线程编程的一个相当重要的技术。

  在讲线程的同步控制前我们需要交代如下概念:

  1、用Java关键字synchonized同步对共享数据操作的方法

  在一个对象中,用synchonized声明的方法为同步方法。Java中有一个同步模型-监视器,负责管理线程对对象中的同步方法的访问,它的原理是:赋予该对象唯一一把'钥匙',当多个线程进入对象,只有取得该对象钥匙的线程才可以访问同步方法,其它线程在该对象中等待,直到该线程用wait() 方法放弃这把钥匙,其它等待的线程抢占该钥匙,抢占到钥匙的线程后才可得以执行,而没有取得钥匙的线程仍被阻塞在该对象中等待。

  file://声明同步的一种方式:将方法声明同步

class store
{
public synchonized void store_in()
{
….
)
}
public synchonized void store_out(){
….}
}

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号