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#中,线程控制方法主要包括Thread.Start()、Thread.Abort()、Thread.Suspend()和Thread.Resume()等。 1. Thread.Start():启动线程的执行,线程从开始执行到结束。 2. Thread.Abort():终止线程的执行,线程立即...
IOCPTest定义了服务端的测试接口,可以通过控制命令来实现对Server的Start, Stop, Suspend, Resume操作。 client下IClient定义了客户端的接口,SocketClient实现了IClient,通过ConnectProc以及SendPacketProc两个...
线程控制方法包括Start、Stop、Abort、Suspend和Resume等,它们允许开发者管理和终止线程。值得注意的是,Stop和Suspend方法可能造成线程挂起在不安全的位置,导致问题。因此,通常推荐使用线程的状态标志或...
实验要求学生能够正确使用这两种方式,并熟悉线程的生命周期以及常用方法,如`start()`、`stop()`(尽管`stop()`已废弃,但这里可能是为了教学目的)、`suspend()`和`resume()`。 实验内容包括两个部分:一是验证前...
- `resume()`:恢复被`suspend()`的线程,但必须确保调用`resume()`前被挂起的线程没有被其他线程中断。 - `wait()`:让当前线程等待,直到其他线程调用`notify()`或`notifyAll()`。 - `notify()`:唤醒正在等待的...
值得注意的是,suspend()和resume()组合使用可能导致死锁,因此现代Java编程更倾向于使用interrupt()和isInterrupted()方法来中断线程。 总的来说,Java中的线程机制提供了丰富的功能,用于实现高效的并发编程。...
线程的控制方法包括Start、Stop、Abort、Suspend和Resume等,但需要注意的是,Stop和Suspend可能会导致线程处于不安全状态,因此通常不推荐使用。通用语言运行时(CLR)会在安全点执行垃圾回收,确保线程在适当位置...
3. **服务控制API**:Windows提供了API函数,如`CreateService`、`StartService`、`StopService`等,用于创建、启动、停止和管理服务。 ### 封装Windows Service控制 为了简化服务的控制操作,开发者通常会创建一...
9. **线程交互**:不推荐使用`stop()`和`suspend()`/`resume()`方法,因为它们可能导致数据不一致和死锁。推荐使用`wait()`和`notify()`进行线程同步。 10. **线程创建后的状态**:调用`start()`方法后,线程进入可...
JAVA 中终止线程的方法是一种重要的多线程编程技术,在Java中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy()and resume()。通过这些方法,我们可以对线程进行...
此外,`Thread`类提供了其他方法,如`stop()`(不推荐使用,因为可能导致数据不一致),`suspend()`(已废弃,因为它会导致死锁),`resume()`(与`suspend()`配合使用,但现在也废弃了)等。 示例中展示了`...
无论哪种方式,线程的执行都是通过调用 start 方法开始的。 在 Java 中,线程的状态可以是Runnable、Running、Waiting、Blocked、Dead 等。其中,Runnable 状态表示线程已经被创建但是还没有开始执行,Running 状态...
API函数`CreateService()`、`OpenService()`、`StartService()`、`StopService()`等是直接与Windows服务管理器进行通信的关键。例如,`OpenService()`用于打开现有服务的句柄,`StartService()`则用于启动指定的服务...
3. **`stop()`, `suspend()`, `resume()`的弃用**: `stop()`方法不安全,因为它会立即停止线程,可能导致资源未释放,引发数据一致性问题。`suspend()`和`resume()`方法容易导致死锁,因为挂起的线程仍持有锁,...
- `Stop(WORD timeout)`:结合了优雅停止和强制停止两种策略,先尝试优雅停止并在`timeout`时间内等待线程自行结束,超时后强制终止。 - **挂起与恢复** - `Suspend()`:调用`SuspendThread()`挂起线程。 - `...
Thread类提供了几个方法来控制线程的生命周期,如start()方法、stop()方法、suspend()方法、resume()方法、sleep()方法等。 线程同步 Java多线程机制中,同步是指多个线程之间的相互影响和约束,以确保多个线程...
线程的控制方法包括`Start`、`Stop`、`Abort`、`Suspend`、`Resume`等,其中`Abort`和`Suspend`涉及到线程安全点,意味着在执行这些操作时,运行时系统会寻找一个安全的位置来停止或暂停线程,以避免破坏程序状态。...
Java提供了suspend()和resume()方法来挂起和唤醒线程,但这些方法已过时,因为它们可能导致死锁。现在通常使用wait()、notify()和notifyAll()方法配合synchronized关键字进行线程间的通信和协作。 7.4 多线程问题 ...