JavaSE---多线程---线程的控制

Posted anpeiyong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE---多线程---线程的控制相关的知识,希望对你有一定的参考价值。

1、Java提供了一些工具方法,可以便捷控制线程的执行:

   1.1  join

          Thread提供了让一个线程等待另一个线程执行完成的方法:join;

          当某个程序的执行流中调用其他线程的join方法,该线程将被阻塞,直到被加入的线程执行完成为止;

          技术图片

 

package com.an;

public class ThreadTarget implements Runnable 
    //多线程共享资源i
    private int i;
    public void run() 
        for (;i<20;i++)
            System.out.println(Thread.currentThread().getName()+"="+i);
        
    

    public static void main(String[] args)throws InterruptedException
        for (int i=0;i<30;i++)
            System.out.println(Thread.currentThread().getName()+"="+i);
            //当i==15时,main线程将被阻塞,test-one线程启动执行,直到test-one线程执行完成,main线程才继续执行
            if (i==15)
                ThreadTarget threadTarget=new ThreadTarget();
                Thread thread=new Thread(threadTarget,"test-one");
                thread.start();
                thread.join();
            
        
    

   1.2  sleep

           sleep可以将当前线程暂停一段时间,进入阻塞状态;

package com.an;

public class ThreadTest 
    public static void main(String[] args)
        for (int i=0;i<30;i++)
            System.out.println(Thread.currentThread().getName()+"="+i);
            //当i==15时,main线程将被阻塞,5000毫秒后继续执行
            if (i==15)
                System.out.println("5000毫秒后执行...");
                Thread.sleep(5000);
            
        
    

  

   1.3  yield

           yield可以让当前线程暂停,但不会进入阻塞,而是直接进入就绪状态(只有优先级相同或者比该线程优先级高的线程才会获得执行机会);

package com.an;

public class ThreadTest 

    public static void main(String[] args)
        for (int i=0;i<30;i++)
            System.out.println(Thread.currentThread().getName()+"="+i);
            //当i==15时,main线程将重新进入就绪状态
            if (i==15)
                Thread.yield();
            
        
    

   1.4      改变线程的优先级

          getPriority()、setPriority()

以上是关于JavaSE---多线程---线程的控制的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE-09 Thread 多线程(完整版)

JavaSE基础---多线程

JavaSE入门学习51:多线程编程

JavaSE入门学习50:多线程编程

多个用户访问同一段代码

JavaSE知识-25(多线程(下))