zoukankan      html  css  js  c++  java
  • java 一个线程控制另一个线程

    两种方法,一个用标记变量,另一个用语法

    不多说,直接代码:

    主方法一:


            send s = new send();
            s.start();

            receive r = new receive();
            r.start();


    class send extends Thread {
            public void run() {
                //睡眠计数
                int s = 0;
                //重发计数
                int r = 0;
                while (flag == true && r < 3) {
                    try {
                        if (s == 20) {
                            // 发送信息
                            byteout = new PrintStream(socket.getOutputStream());
                            byteout.write(sendStart.data);
                        }
                        s++;
                        System.out.println(s);
                        sleep(500);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (r == 3) {
                    ShowDialog("服务器无响应");
                }

            }
        }

        // 业务主线程,负责接收服务器端的消息
        class receive extends Thread {
            public void run() {
                try {
                    while (socket.isConnected()) {
                        in = socket.getInputStream();
                        in.read(content);
                        // if (收到数据) {         
                            flag = false;
                            //这个睡眠是为了给时间让send看到标记变量已改变
                            sleep(1000);
                            
                            byteout.close();
                            socket.close();
                              。。。。。。。。。。。。。。。
                        }
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }


    第二种方法:

     

    package com.test;
    
    
    
    
    public class sendto {
    	
    	
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args){
    		// TODO Auto-generated method stub
    		// 开启发送线程
    		
    		// 开启重发线程
    		send s = new send();
    		s.start();
    		// 监听服务器的反馈
    		receive r = new receive(s);
    		r.start();
    	}
    
    }
    
    class send extends Thread {
    	
        //重发计数
    	int r = 0;
    	
    	public void run() {
    
    		while (r < 3) {
    			try {
                    System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxx");				
    				r++;
    				sleep(2000);
    			}  catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		System.out.println("1111111111");
    	}
    }
    
    
    
    // 业务主线程,负责接收服务器端的消息
    class receive extends Thread {
    	private Thread subThread;
    
    	public receive(Thread thread) {
    		subThread = thread;
    	}
    
    	public void run() {
    
    		// 使SEND线程结束
    		try {
    			sleep(3000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		subThread.suspend();
    
    		System.out.println("关闭");
    
    	}
    }




  • 相关阅读:
    小程序 订阅消息功能实现 wx.requestSubscribeMessage
    Azure API Management (2) API Managment 保护内网服务,且通过JWT验证
    Azure Firewall (1) Azure虚拟桌面结合Azure防火墙设置访问白名单
    一文详解脏读、不可重复读、幻读
    SpringBoot引入第三方jar的Bean的三种方式
    单例模式,真不简单
    一文详解MySQL的锁机制
    高并发下秒杀商品,必须知道的9个细节
    MySQL记录锁、间隙锁、临键锁小案例演示
    Git五个常见问题及解决方法
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314563.html
Copyright © 2011-2022 走看看