美文网首页
java多线程的方法

java多线程的方法

作者: 戴马 | 来源:发表于2016-05-27 11:10 被阅读51次

    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类的方法。

    相关文章

      网友评论

          本文标题:java多线程的方法

          本文链接:https://www.haomeiwen.com/subject/rmoxdttx.html