网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  对java多线程技术中所有方法的详细解析     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:60次  录入:管理员--2007-11-16  
 

一、run()和start()


这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由java的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。


二、关键字synchronized


这个关键字用于保护共享数据,当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问该对象时,被synchronized修饰的数据将被“上锁”,阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。


public threadtest implements runnable

{
public synchronized void run(){
for(int i=0;i<10;i++)
{
system.out.println(" " + i);
}
}
public static void main(string[] args)

{
runnable r1 = new threadtest();
runnable r2 = new threadtest();
thread t1 = new thread(r1);
thread t2 = new thread(r2);
t1.start();
t2.start();
}

}



以上这段程序中的 i 变量并不是共享数据,也就是这里的synchronized关键字并未起作用。因为t1,t2两个线程是两个对象(r1,r2)的线程。不同的对象其数据是不同的,所以r1和r2两个对象的i变量是并不是共享数据。


当把代码改成如下:synchronized关键字才会起作用

runnable r = new threadtest();

thread t1 = new thread(r);

thread t2 = new thread(r);

t1.start();

t2.start();


三、sleep()


使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常


比如有两个线程同时执行(没有synchronized),一个线程优先级为max_priority,另一个为min_priority,如果没有sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级就有机会执行了。


总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。


四、join()


join()方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。


五、yield()


它与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。


六、wait()和notify()、notifyall()


这三个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块内使用这三个方法。前面说过synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。


wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有

锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。


notifyall()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。


 
 
上一篇: java语言中改善代码的质量--重构    下一篇: java基础:java程序开发中如何应用线程
  相关文档
java以及其相关性应用 11-17
java开发框架:关于ssh架构的简单总结 05-08
用solsticeenterprisemanager建立java网络管理应用程序 11-17
深入java中文问题及最优解决方法 11-17
struts中文问题和国际化问题的终极解决方案 11-17
j2se_api_中文 11-17
在hibernate中获取数据方式与缓存使用 11-16
开发晋级篇:java性能优化技巧集锦 11-17
深入浅出:基于java语言解释器设计模式 11-16
java server faces建立交互式web站点 11-17
eworkflow工作流平台新版发布! 11-17
随机数 获取背景音乐 11-17
第三方类库--hibernate + proxool配置 01-24
安装 websphere 应用服务器全攻略 11-17
java知识:关于string和stringbuffer 11-17
java中文问题详解,底层编码解剖 11-16
如何使用kxml解析wap 11-17
getyear 方法 11-16
java中数据库事务处理的实现 11-16
绕过java开发瓶颈 解析ejb编程限制二 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息