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("关闭");

	}
}
时间: 2024-11-25 12:34:45

java 一个线程控制另一个线程的相关文章

深入浅出Win32多线程程序设计-【2】线程控制

  WIN32线程控制主要实现线程的创建.终止.挂起和恢复等操作,这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数. 1.线程函数 在启动一个线程之前,必须为线程编写一个全局的线程函数,这个线程函数接受一个32位的LPVOID作为参数,返回一个UINT,线程函数的结构为: UINT ThreadFunction(LPVOID pParam) { //线程处理代码 return0; } 在线程处理代码部分通常包括一个死循环,该循环中先等待某事情的发生,再处理相关的工作: wh

线程中止-请教一个JAVA线程的奇怪问题

问题描述 请教一个JAVA线程的奇怪问题 在学习JAVA线程时候的遇到一个很奇怪的现象.让我们先来看代码 public class TestThread { public static void main(String[] args) { IRun ir = new IRun(); Thread it = new Thread(ir); it.start(); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger

JVM源码分析之一个Java进程究竟能创建多少线程

概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于Linux Kernel的源码分析,今天要说的是JVM里比较常见的一个问题 这个问题可能有几种表述 一个Java进程到底能创建多少线程? 到底有哪些因素决定了能创建多少线程? java.lang.OutOfMemoryError: unable to create new native thread的异常究竟是怎么回事 不过我这里先声明下可能不能完全百分百将各种因素都理出来,因为毕竟我不是做Lin

请教java线程使用的一个问题

问题描述 请教java线程使用的一个问题 在web项目中.假设在页面上点了A按钮,然后后台某种需求,新建了A线程,干某件事.过了一会儿.我再点A按钮,又会启动一个新线程,干同一件事.请问一下,这样做好不好?或者说在后面点A按钮的时候,直接使用A线程干事而不是重新创建.请问这样做行不行?行的话怎么弄.谢谢 解决方案 看你的线程是干嘛用的.如果你的线程只有一个单一的事件待解决(比如说要执行一个大量计算的函数,但不想阻塞主界面),这样做可以,但是这时候可能使用线程池更适合.如果你的线程是要一直活着并长

请问下,怎么样实现一个线程来调用控制多个线程的执行

问题描述 请问下,怎么样实现一个线程来调用控制多个线程的执行 在C# Winfrom项目中,有一个主窗体(mainfrom)和三个子窗体(subfrom1.subfrom2.subfrom3). 在主窗体(mainfrom)中有一个进程(用来控制调用三个子窗体中的进程).在三个子窗体中分别各有一个进程(用于控制执行各自子窗体中的任务). 请问怎么样实现在主窗体中的进程来控制调用三个子窗体中进程的执行,可以动态控制调用这三个子窗体中的进程的执行. 有没有相关的DEMO或参考资料,谢谢. 解决方案

java 中如何实现多个线程共享一个类

问题描述 java 中如何实现多个线程共享一个类 预想: 一个类 ClassA 中的一个类变量 public static int data = 100; 我起一个main方法 调用 ClassA.data = 200; 再起一个main方法 读取ClassA.data 获取的值就是200? 任意线程修改单例的ClassA 其他线程读取都是最新的 如何做到? 解决方案 java如何实现多个线程并发运行 解决方案二: 启动2个main,不是线程,是进程. 解决方案三: 用final修饰 publi

java 使用线程做的一个简单的ATM存取款实例代码_java

实现Runnable接口.当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性. 我们知道,一个具有生命的线程,具有下面五种状态: 创建状态 使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread) 可运行状态 使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable) 运行中状态 Java运行系统通过调度选中一个Run

JAVA&amp;amp;nbsp;线程&amp;amp;nbsp;开启线程&amp;amp;nbsp;一个类里只开…

进程和线程一样,可以多个.进程是静态的,一个进程里可以有多个线程.   起动线程有两个方法:一个是接口RUNABLE,一个是继承THERAD   public class  testthread{  public static void main(){   Runner1 r = new Runner1();   Thread t = new Thread(r);   t.start;    }  class Runner1 implements Runnable{   public void

线程-java中下面这段代码是一个匿名对象传入一个匿名对象在调用start方法吗

问题描述 java中下面这段代码是一个匿名对象传入一个匿名对象在调用start方法吗 new Thread(new Runnable() {.....省略代码若干..........}).start(); 上面这段代码是一个匿名对象传入一个匿名对象在调用start方法吗 还是一个匿名类传入一个匿名对象再调用start方法 我有点分不清匿名对象和匿名类呢 解决方案 new Runnable() {.....省略代码若干..........} 匿名类,因为Runnable是接口,需要实现类 new