收藏 分享(赏)

Java多线程技术中所有方法的详细解析.doc

上传人:gnk289057 文档编号:4522238 上传时间:2019-01-01 格式:DOC 页数:3 大小:28KB
下载 相关 举报
Java多线程技术中所有方法的详细解析.doc_第1页
第1页 / 共3页
Java多线程技术中所有方法的详细解析.doc_第2页
第2页 / 共3页
Java多线程技术中所有方法的详细解析.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、Java 多线程技术中所有方法的详细解析一、run()和 start()这两个方法应该都比较熟悉,把需要并行处理的代码放在 run()方法中,start()方法启动线程将自动调用 run()方法,这是由 Java 的内存机制规定的。并且 run()方法必须是public 访问权限,返回值类型为 void.二、关键字 Synchronized这个关键字用于保护共享数据,当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问该对象时,被 Synchronized 修饰的数据将被“上锁”,阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。以下是引用片段

2、:public ThreadTest implements Runnable public synchronized void run() for(int i=0;i10;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();

3、以上这段程序中的 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() 使当前线程(即调用该方法的线程)暂停执行一段

4、时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有 Synchronized 同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常比如有两个线程同时执行(没有 Synchronized),一个线程优先级为 MAX_PRIORITY,另一个为 MIN_PRIORITY,如果没有 Sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程 sleep(5000)后,低优先级就有机会执行了。总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。四、join()join()方法使调用该方法的线程在

5、此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。五、yield()它与 sleep()类似,只是不能由用户指定暂停多长时间,并且 yield()方法只能让同优先级的线程有执行的机会。六、wait()和 notify()、notifyAll()这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法。前面说过 Synchronized 这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出 Synchronized 数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入 Synchronized 数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则 notify()不起作用。notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报