多线程操作的方法(sleep,)setPriority(Thread.MIN_PRIORITY);yield();

Posted 刁兆建

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程操作的方法(sleep,)setPriority(Thread.MIN_PRIORITY);yield();相关的知识,希望对你有一定的参考价值。

在多线程中所有的操作方法都是从Thread类开始的,所有的操作基本都在Thread类中。

第一取得线程名字

a,在Thread类中,可以通过getName()方法,获得线程的名字,可以通过setName()方法设置线程的名字

b,线程名字一般在线程启动前设置,但是也允许为已经运行的线程设置名称,允许2个Thread对象有相
同的名字,但是不推荐,你懂的!!!

c,如果程序没有为线程指定名字,则系统自动为线程分配一个名称。

    package xianchengcaozuo;  
      
    public class ThreadName {  
     public static void main(String[] args) {  
         Demo d1= new Demo();  
         Thread t1= new Thread(d1);  
         Thread t2= new Thread(d1,"线程A");  
         Thread t3= new Thread(d1,"线程B");  
         Thread t4= new Thread(d1);  
         t1.start();  
         t2.start();  
         t3.start();  
         t4.start();  
    }  
    }  
    class Demo implements Runnable{  
      
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            for(int i=0;i<5;i++){  
                System.out.println(Thread.currentThread().getName()+"运行,i="+i);  
            }  
              
        }  
          
          
          
    }  
Thread-0运行,i=0  
Thread-0运行,i=1  
Thread-0运行,i=2  
线程A运行,i=0  
线程A运行,i=1  
线程A运行,i=2  
Thread-0运行,i=3  
Thread-0运行,i=4  
线程A运行,i=3  
线程A运行,i=4  
线程B运行,i=0  
线程B运行,i=1  
线程B运行,i=2  
线程B运行,i=3  
线程B运行,i=4  
Thread-1运行,i=0  
Thread-1运行,i=1  
Thread-1运行,i=2  
Thread-1运行,i=3  
Thread-1运行,i=4 

没指定名字,则按编号!!

第二 获取当前线程对象currentThread()

第三判断线程是否启动成功 isAlive()

第四 强制运行线程

    package xianchengcaozuo;  
    /* 
     * 强制运行线程用join方法,期间其它线程无法运行,必须等待此线程 
     * 执行完后,其它线程才可以执行 
     */  
    public class Qiangzhi {  
        public static void main(String[] args) {  
            Demo1 d1= new Demo1();  
            Thread t1= new Thread(d1,"线程A");  
            t1.start();  
            for(int i=0;i<50;i++){  
                if(i>10){  
                    try {  
                        t1.join();  
                    } catch (InterruptedException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  
                }  
                System.out.println("main线程运行:"+i);  
            }  
              
        }  
    }  
    class Demo1 implements Runnable{  
      
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            for(int i=0;i<50;i++){  
                System.out.println(Thread.currentThread().getName()+"运行,i="+i);  
            }  
              
        }  
          
          
          
    }  

结果:

main线程运行:0  
main线程运行:1  
main线程运行:2  
main线程运行:3  
main线程运行:4  
main线程运行:5  
main线程运行:6  
main线程运行:7  
main线程运行:8  
main线程运行:9  
main线程运行:10  
线程A运行,i=0  
线程A运行,i=1  
线程A运行,i=2  
线程A运行,i=3  
线程A运行,i=4  
线程A运行,i=5  
线程A运行,i=6  
线程A运行,i=7  
线程A运行,i=8  
线程A运行,i=9  
线程A运行,i=10  
线程A运行,i=11  
线程A运行,i=12  
线程A运行,i=13  
线程A运行,i=14  
线程A运行,i=15  
线程A运行,i=16  
线程A运行,i=17  
线程A运行,i=18  
线程A运行,i=19  
线程A运行,i=20  
线程A运行,i=21  
线程A运行,i=22  
线程A运行,i=23  
线程A运行,i=24  
线程A运行,i=25  
线程A运行,i=26  
线程A运行,i=27  
线程A运行,i=28  
线程A运行,i=29  
线程A运行,i=30  
线程A运行,i=31  
线程A运行,i=32  
线程A运行,i=33  
线程A运行,i=34  
线程A运行,i=35  
线程A运行,i=36  
线程A运行,i=37  
线程A运行,i=38  
线程A运行,i=39  
线程A运行,i=40  
线程A运行,i=41  
线程A运行,i=42  
线程A运行,i=43  
线程A运行,i=44  
线程A运行,i=45  
线程A运行,i=46  
线程A运行,i=47  
线程A运行,i=48  
线程A运行,i=49  
main线程运行:11  
main线程运行:12  
main线程运行:13  
main线程运行:14  
main线程运行:15  
main线程运行:16  
main线程运行:17  
main线程运行:18  
main线程运行:19  
main线程运行:20  
main线程运行:21  
main线程运行:22  
main线程运行:23  
main线程运行:24  
main线程运行:25  
main线程运行:26  
main线程运行:27  
main线程运行:28  
main线程运行:29  
main线程运行:30  
main线程运行:31  
main线程运行:32  
main线程运行:33  
main线程运行:34  
main线程运行:35  
main线程运行:36  
main线程运行:37  
main线程运行:38  
main线程运行:39  
main线程运行:40  
main线程运行:41  
main线程运行:42  
main线程运行:43  
main线程运行:44  
main线程运行:45  
main线程运行:46  
main线程运行:47  
main线程运行:48  
main线程运行:49 

第五 线程的休眠

    package xianchengcaozuo;  
      
    import java.util.Date;  
      
    /* 
     * 通过sleep方法,可以使线程暂停执行 
     *  
     */  
    public class ThreadSleep {  
        public static void main(String[] args) {  
            Demo2 d1= new Demo2();  
            Thread t1= new Thread(d1,"线程C");  
            t1.start();  
            }  
        }  
      
    class Demo2 implements Runnable{  
      
        @Override  
        public void run() {  
          
            for(int i=0;i<10;i++){  
                try {  
                    //此处是毫秒  
                    Thread.sleep(5000);  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }     
                System.out.println(new Date());  
                    System.out.println(Thread.currentThread().getName()+"运行,i="+i);  
            }  
        }  
          
          
          
    }  
    Tue Apr 22 11:10:40 CST 2014  
    线程C运行,i=0  
    Tue Apr 22 11:10:45 CST 2014  
    线程C运行,i=1  
    Tue Apr 22 11:10:50 CST 2014  
    线程C运行,i=2  
    Tue Apr 22 11:10:55 CST 2014  
    线程C运行,i=3  
    Tue Apr 22 11:11:00 CST 2014  
    线程C运行,i=4  

线程终止:

如果主线程是5000,那么会先run正常,在被终止

    package xianchengcaozuo;  
    //当一个线程运行的时候,另一个线程可以通过interrupt方法种植其线程.  
      
      
    class MyThread09 implements Runnable {  
        public void run() {  
            System.out.println("1、进入run方法");  
            for (int i = 0; i < 5; i++) {  
                try {  
                    Thread.sleep(5000);  
                    System.out.println("2、休眠已经完成");  
                } catch (Exception e) {  
                    System.out.println("3、休眠被终止");  
                    return;  
                }  
                System.out.println("4、run方法正常结束");  
            }  
        }  
    }  
    class Threadinterrupt{  
        public static void main(String[] args) {  
            MyThread09 my = new MyThread09();  
            Thread t = new Thread(my,"线程");  
            t.start();  
            try {  
                Thread.sleep(2000);  
            } catch (Exception e) {  
            }  
            t.interrupt();  
        }  
    }  
    1、进入run方法  
    3、休眠被终止  

线程的优先级:

    package xianchengcaozuo;  
      
    public class Threadjibie {  
        public static void main(String[] args) {  
            Demo5 my = new Demo5();  
            Thread t1 = new Thread(my,"线程A");  
            Thread t2 = new Thread(my,"线程B");  
            Thread t3 = new Thread(my,"线程C");  
            //设置线程优先级  
            t1.setPriority(Thread.MIN_PRIORITY);  
            t2.setPriority(Thread.NORM_PRIORITY);  
            t3.setPriority(Thread.MAX_PRIORITY);  
            t1.start();  
            t2.start();  
            t3.start();  
        }  
    }  
    class Demo5 implements Runnable {  
        public void run() {  
            for (int i = 0; i < 5; i++) {  
                try {  
                    Thread.sleep(500);  
                } catch (Exception e) {  
                }  
                System.out.println(Thread.currentThread().getName() + "运行,i = " + i);  
            }  
        }  
        }  
    线程C运行,i = 0  
    线程B运行,i = 0  
    线程A运行,i = 0  
    线程C运行,i = 1  
    线程B运行,i = 1  
    线程A运行,i = 1  
    线程C运行,i = 2  
    线程B运行,i = 2  
    线程A运行,i = 2  
    线程C运行,i = 3  
    线程B运行,i = 3  
    线程A运行,i = 3  
    线程C运行,i = 4  
    线程B运行,i = 4  
    线程A运行,i = 4  


主方法的优先级是中级

线程的礼让:

    package xianchengcaozuo;  
    //yield(),线程礼让,将操作让给其它线程  
    public class ThreadLirang {  
        public static void main(String[] args) {  
            Demo6 d1= new Demo6();  
              
            Thread t1 = new Thread(d1);  
            Thread t2 = new Thread(d1);  
            t1.start();  
            t2.start();  
              
        }  
    }  
    class Demo6 implements Runnable{  
      
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            for(int i=0;i<5;i++){  
                System.out.println(Thread.currentThread().getName()+"运行,i="+i);  
                if(i==3){  
                    Thread.currentThread().yield();  
                    System.out.println(Thread.currentThread().getName()+"礼让");  
                }  
            }  
        }  
          
          
          
    }  

结果: Thread-1运行,i=0
Thread-1运行,i=1
Thread-1运行,i=2
Thread-1运行,i=3
Thread-0运行,i=0
Thread-0运行,i=1
Thread-0运行,i=2
Thread-0运行,i=3
Thread-0礼让
Thread-0运行,i=4
Thread-1礼让
Thread-1运行,i=4

以上是关于多线程操作的方法(sleep,)setPriority(Thread.MIN_PRIORITY);yield();的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程研究03-线程的基本操作(notify,notifyAll,interrupt,join,sleep)

诺禾:诺禾通俗易懂的告诉你java多线程中wait和sleep的区别

多线程

mysql sleep线程过多

Java多线程java中的Sleep方法

多线程中的wait与sleep到底谁释放了锁