`
luzl
  • 浏览: 571583 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

start suspend resume stop

    博客分类:
  • Java
阅读更多
package scjp;

import com.sun.corba.se.impl.ior.NewObjectKeyTemplateBase;

class MyThread implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		int i=0;
		while (true) {
			System.out.println(Thread.currentThread().getName() + " i " + i++);
		}
	}
}

public class DemoThreadResume{
	
	
	Thread thread;
	
	public DemoThreadResume(String name) {
		// TODO Auto-generated constructor stub
		thread=new Thread(new MyThread());
		thread.setName(name);
	}

	
	
	public static void main(String[] args) {
		DemoThreadResume demoThreadResume=new DemoThreadResume("Runnning Thread");
		System.out.println("Starting ");
		demoThreadResume.thread.start();
		try {
			Thread.sleep(20);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		demoThreadResume.thread.suspend();
		demoThreadResume.thread.resume();
		try {
			Thread.sleep(20);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		demoThreadResume.thread.stop();
		
	}
	
}



这段code里专门列出了线程的这几种方法的调用.首先start,然后suspended,然后resum,然后stop.
我在调试这段代码的时候遇到了一个问题,如果在
demoThreadResume.thread.suspend();
demoThreadResume.thread.resume();

中间加入System.out.println("Suspend ... ");
线程将会阻塞,而不执行.debug后才发现System.out.println是同步方法,因为已经呗前面的Thread拥有所以不能被后面的使用,这是不是也是resume的一个特点呢,虽然挂起,仍然拥有锁(这里是这个println方法的锁).下面是println方法的源代码.
  /**
     * Prints a String and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(String)}</code> and then
     * <code>{@link #println()}</code>.
     *
     * @param x  The <code>String</code> to be printed.
     */
    public void println(String x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }
分享到:
评论

相关推荐

    C#多线程之线程控制详解

    在C#中,线程控制方法主要包括Thread.Start()、Thread.Abort()、Thread.Suspend()和Thread.Resume()等。 1. Thread.Start():启动线程的执行,线程从开始执行到结束。 2. Thread.Abort():终止线程的执行,线程立即...

    一个完成端口模型的实现(IOCP)

    IOCPTest定义了服务端的测试接口,可以通过控制命令来实现对Server的Start, Stop, Suspend, Resume操作。 client下IClient定义了客户端的接口,SocketClient实现了IClient,通过ConnectProc以及SendPacketProc两个...

    VB-.NET多线程编程的详细说明(完整版).doc

    线程控制方法包括Start、Stop、Abort、Suspend和Resume等,它们允许开发者管理和终止线程。值得注意的是,Stop和Suspend方法可能造成线程挂起在不安全的位置,导致问题。因此,通常推荐使用线程的状态标志或...

    实验十 java多线程(文档中包含可执行源码)

    实验要求学生能够正确使用这两种方式,并熟悉线程的生命周期以及常用方法,如`start()`、`stop()`(尽管`stop()`已废弃,但这里可能是为了教学目的)、`suspend()`和`resume()`。 实验内容包括两个部分:一是验证前...

    Java程序开发教学课件:10-线程.ppt

    - `resume()`:恢复被`suspend()`的线程,但必须确保调用`resume()`前被挂起的线程没有被其他线程中断。 - `wait()`:让当前线程等待,直到其他线程调用`notify()`或`notifyAll()`。 - `notify()`:唤醒正在等待的...

    四川大学java7课件

    值得注意的是,suspend()和resume()组合使用可能导致死锁,因此现代Java编程更倾向于使用interrupt()和isInterrupted()方法来中断线程。 总的来说,Java中的线程机制提供了丰富的功能,用于实现高效的并发编程。...

    VB.NET多线程编程

    线程的控制方法包括Start、Stop、Abort、Suspend和Resume等,但需要注意的是,Stop和Suspend可能会导致线程处于不安全状态,因此通常不推荐使用。通用语言运行时(CLR)会在安全点执行垃圾回收,确保线程在适当位置...

    Windows Service 的控制封装类

    3. **服务控制API**:Windows提供了API函数,如`CreateService`、`StartService`、`StopService`等,用于创建、启动、停止和管理服务。 ### 封装Windows Service控制 为了简化服务的控制操作,开发者通常会创建一...

    2011年计算机二级Java的应用章节练习题及答案[定义].pdf

    9. **线程交互**:不推荐使用`stop()`和`suspend()`/`resume()`方法,因为它们可能导致数据不一致和死锁。推荐使用`wait()`和`notify()`进行线程同步。 10. **线程创建后的状态**:调用`start()`方法后,线程进入可...

    JAVA中 终止线程的方法介绍

    JAVA 中终止线程的方法是一种重要的多线程编程技术,在Java中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy()and resume()。通过这些方法,我们可以对线程进行...

    Java入门笔记6_线程

    此外,`Thread`类提供了其他方法,如`stop()`(不推荐使用,因为可能导致数据不一致),`suspend()`(已废弃,因为它会导致死锁),`resume()`(与`suspend()`配合使用,但现在也废弃了)等。 示例中展示了`...

    Java 线程详解

    无论哪种方式,线程的执行都是通过调用 start 方法开始的。 在 Java 中,线程的状态可以是Runnable、Running、Waiting、Blocked、Dead 等。其中,Runnable 状态表示线程已经被创建但是还没有开始执行,Running 状态...

    【AU3】API及WMI控制系统服务

    API函数`CreateService()`、`OpenService()`、`StartService()`、`StopService()`等是直接与Windows服务管理器进行通信的关键。例如,`OpenService()`用于打开现有服务的句柄,`StartService()`则用于启动指定的服务...

    Java面试之——线程编程方面

    3. **`stop()`, `suspend()`, `resume()`的弃用**: `stop()`方法不安全,因为它会立即停止线程,可能导致资源未释放,引发数据一致性问题。`suspend()`和`resume()`方法容易导致死锁,因为挂起的线程仍持有锁,...

    VC 线程封装类 简单易懂

    - `Stop(WORD timeout)`:结合了优雅停止和强制停止两种策略,先尝试优雅停止并在`timeout`时间内等待线程自行结束,超时后强制终止。 - **挂起与恢复** - `Suspend()`:调用`SuspendThread()`挂起线程。 - `...

    Java多线程机制研究.pdf

    Thread类提供了几个方法来控制线程的生命周期,如start()方法、stop()方法、suspend()方法、resume()方法、sleep()方法等。 线程同步 Java多线程机制中,同步是指多个线程之间的相互影响和约束,以确保多个线程...

    VB.NET多线程编程技术--大量提高应用程序的性能[收集].pdf

    线程的控制方法包括`Start`、`Stop`、`Abort`、`Suspend`、`Resume`等,其中`Abort`和`Suspend`涉及到线程安全点,意味着在执行这些操作时,运行时系统会寻找一个安全的位置来停止或暂停线程,以避免破坏程序状态。...

    java教学课件:第7章 多线程.ppt

    Java提供了suspend()和resume()方法来挂起和唤醒线程,但这些方法已过时,因为它们可能导致死锁。现在通常使用wait()、notify()和notifyAll()方法配合synchronized关键字进行线程间的通信和协作。 7.4 多线程问题 ...

Global site tag (gtag.js) - Google Analytics