多線程操作的方法(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM