java线程安全退出

在多线程编程中,某些情况下,主线程需要等待子线程安全退出后,主线程在继续执行。

为了实现这个效果,我借助Thread类isAlive()方法来实现。

isAlive()方法是判断线程是否是活跃状态。

以下是实现代码:

class Test 类是主线程。

class ProcessAccept 类是子线程。

线程类  ProcessAccept :

/**  
 * 处理接入线程类  
 *   
 * @author Administrator  
 *   
 */  
class ProcessAccept extends Thread {   
    /**  
     * 线程停止标志  
     */  
    private boolean stopRequested = false;   
    /**  
     * 同步锁  
     */  
    private ReentrantLock lock = new ReentrantLock();   
  
       
    /**  
     * 向线程发送停止请求  
     */  
    public void stopRequest() {   
        lock.lock();   
        // 设置停止标志为真   
        stopRequested = true;   
        lock.unlock();   
    }   
  
    /**  
     * 获得当前停止标志  
     *   
     * @return 前停止标志的值  
     */  
    private boolean getStopRequest() {   
  
        boolean tempStopRequested = false;   
        // 同步加锁lock.lock()   
        lock.lock();   
        tempStopRequested = stopRequested;   
        // 同步解锁lock.unlock()   
        lock.unlock();   
        return tempStopRequested;   
    }   
       
    /**  
     * 线程处理接入  
     */  
    public void run(){   
        while (true) {   
            //判断停止标志   
            if (this.getStopRequest()){   
                break;   
            }   
            //此处处理业务逻辑   
        }      
    }  


调用类Test:
public class Test {   
    ProcessAccept processAccept = new ProcessAccept();   
       
    public int stop(){   
        try {   
            // 将线程的退出标志设置为真,处理未决连接请求   
            processAccept.stopRequest();   
            //等待线程安全退出后,再向下执行   
            while(processAccept.isAlive()){   
                try {   
                    Thread.sleep(200);   
                } catch (InterruptedException e) {   
                    e.printStackTrace();   
                }   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
       
       
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        Test t = Test();   
        //启动线程   
        t.processAccept.start();   
           
        //安全停止线程   
        t.stop();   
           
           
    }  

你可能感兴趣的:(java,多线程,thread,编程)