java多线程的方法

1.setPriority():设置线程的优先权;

2.sleep():使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同时访问共享数据。注意该方法要捕获异常。总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。

用法:在高优先级的线程中加上sleep(5000),当高优先级的线程执行sleep(5000)后,就会暂停5000毫秒,其它线程就可以执行了。

3.yield():与sleep()类似,但不可以由用户指定暂停的时间长短。暂停线程的执行,给其它具有相同优先级的线程执行的机会,若此时没有其他线程执行,则此线程继续执行。这个函数并不会释放锁住的对象。

4.wait():类似sleep(),不同的是wait()会先释放锁住的对象,然后再执行等待的动作。这个函数属于Object类。另外,wait()所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则会抛出异常lllegalMonitorStateException.

5.join():等待加入的线程执行完毕才会执行下一个线程。加入的线程通过interrput()来唤醒。注意该方法也要捕获异常。

6.notify()和notifyAll():这两个方法以及wait()用于协调多个线程对共享数据的存储,所以必须要在Synchronized语句块中使用者三个方法,即数据对象必须是上锁的,是线程安全的。Synchornized是用户保护共享数据,阻止其他线程对共享数据的存储,但是这样就会使得程序的流程变得很不灵活。就需要这三个方法来灵活的控制。

wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。

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

注意 这三个方法都是java.lang.Ojbect的方法!

7.run()和start():把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用run()方法,这是由java的内存机制规定的。并且run()方法必须是pubic访问权限,返回值类型为void。

8.关键字Synchronized

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


wait()和notify(),notifyAll()是Object类的方法,sleep()和yield()是Thread类的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 12,072评论 3 87
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,083评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,196评论 1 15
  • 写在前面的话: 这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小...
    SmartSean阅读 10,234评论 12 45
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 7,400评论 0 13