• 线程控制


    1.join

    package com.thread.control;
    
    public class ControlByJoin extends Thread{
        public ControlByJoin(String name){
            super(name);
        }    
        
        public void run(){
            for(int i=0;i<100;i++){
                System.out.println("current Thread name:" + Thread.currentThread().getName() + " "+
                        "Num:" + i);
            }
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            for(int i=0;i<100;i++){
                
                
                if(i==20){
                    ControlByJoin cj = new ControlByJoin("the thread is joined");
                    cj.start();
                    try {
                        cj.join();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }                
                }
                System.out.println("current Thread name:" + Thread.currentThread().getName() + " "+ 
                        "Num:" + i);
            }
        }
    
    }

    运行结果

    ...
    current Thread name:main Num:17
    current Thread name:main Num:18
    current Thread name:main Num:19
    current Thread name:the thread is joined Num:0
    current Thread name:the thread is joined Num:1
    current Thread name:the thread is joined Num:2
    current Thread name:the thread is joined Num:3
    ...
    current Thread name:the thread is joined Num:96
    current Thread name:the thread is joined Num:97
    current Thread name:the thread is joined Num:98
    current Thread name:the thread is joined Num:99
    current Thread name:main Num:20
    current Thread name:main Num:21
    current Thread name:main Num:22
    ...
    current Thread name:main Num:95
    current Thread name:main Num:96
    current Thread name:main Num:97
    current Thread name:main Num:98
    current Thread name:main Num:99

     2. SetDaemon

    package com.thread.control;
    
    public class ControlBySetDaemon extends Thread{
        public ControlBySetDaemon(String name){
            super(name);
        }
        public void run(){
            for (int i=0;i<1000;i++){
                System.out.println(getName()+" "+i);
            }
        }
    
        public static void main(String[] args) {
            ControlBySetDaemon sd=new ControlBySetDaemon("Daemon Thread");
            sd.setDaemon(true);
            sd.start();
            for (int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+" "+i);
            }
        }
    }

    //从运行结果可以看到,Daemon Thread并没有运行到自然死亡,而是在前台mian线程结束后被死亡了。

    3.sleep

    package com.thread.control;
    
    public class ControlBySleep extends Thread{
        public ControlBySleep(String name){
            super(name);
        }
        
        public void run(){
            for(int i=0 ; i<100 ; i++){
                System.out.println(getName() + " " + i);
            }
        }
    
        public static void main(String[] args) {
            ControlBySleep s = new ControlBySleep("new Thread");
            s.start();
            for(int i=0 ; i<100 ; i++){
                System.out.println(Thread.currentThread().getName() + " " + i);
                //当i为20时,主线程sleep3秒
                if (i==20){
                    System.out.println("begin sleep");
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }            
                    System.out.println("end sleep");
                }
            }        
        }
    
    }

    运行结果

    从结果中可以看到在主线程sleep的3秒中,new Thread已经完成运行。

    ...
    main 17
    new Thread 17
    main 18
    new Thread 18
    main 19
    new Thread 19
    main 20
    new Thread 20
    begin sleep
    new Thread 21
    new Thread 22
    new Thread 23
    new Thread 24
    ....
    new Thread 95
    new Thread 96
    new Thread 97
    new Thread 98
    new Thread 99
    end sleep
    main 21
    main 22
    main 23
    main 24
    main 25
    ....

     4.yield

    package com.thread.control;
    
    public class ControlByYield extends Thread{
        public ControlByYield(String name){
            super(name);
        }
        
        public void run(){
            for(int i=0;i<100;i++){
                System.out.println(getName()+ " " + i);
                if(i==20){
                    Thread.yield();                
                }
            }
        }
    
        public static void main(String[] args) {
            ControlByYield y1=new ControlByYield("Thread 1");
            y1.setPriority(MAX_PRIORITY);
            ControlByYield y2=new ControlByYield("Thread 2");
            y2.setPriority(MIN_PRIORITY);
            y1.start();
            y2.start();
        }
    
    }

    运行结果

    从运行结果上可以看到优先执行了Thread 1

    ...
    Thread 1 95
    Thread 1 96
    Thread 1 97
    Thread 1 98
    Thread 1 99
    Thread 2 1
    Thread 2 2
    Thread 2 3
    Thread 2 4
    Thread 2 5
    ...

     5. setPriority

    package com.thread.control;
    
    public class ControlByPriority extends Thread{
        public ControlByPriority(String name){
            super(name);
        }
        
        public void run(){
            for(int i = 0; i<100;i++){
                System.out.println(getName() +" " +"The Priority is : " + 
            getPriority() + " "+"The value of i is : "+ i);
            }
        }
    
        public static void main(String[] args) {
            Thread.currentThread().setPriority(6);
            System.out.println(Thread.currentThread().getName()+ " "+"The Priority of main thread is : "+ 
                    Thread.currentThread().getPriority());
            for(int i=0;i<100;i++){
                if(i==10){
                    ControlByPriority low =new ControlByPriority("low");
                    low.start();
                    System.out.println("The Priority of thread low is : "+ 
                            low.getPriority());
                    low.setPriority(MIN_PRIORITY);
                }
                
                if(i==20){
                    ControlByPriority high =new ControlByPriority("high");
                    high.start();
                    System.out.println("The Priority of thread high is : "+ 
                            high.getPriority());
                    high.setPriority(MAX_PRIORITY);
                }            
            }
        }
    }
  • 相关阅读:
    关于两次fork
    阻塞非阻塞与同步异步的区别
    函数调用堆栈
    数组
    64位操作系统与32位操作系统数据类型的字节数
    Redis 键(key)
    Redis 命令
    Redis 安装
    Redis 配置
    MongoDB 安装
  • 原文地址:https://www.cnblogs.com/moonpool/p/5494935.html
Copyright © 2020-2023  润新知