源:http://samttsch.iteye.com/blog/1118998
评:
1 interruped
java中当一个线程sleep时,调用其中断方法是无效的,因此在异常的处理中需要将线程interrupt(),否则线程依然是非interrupt状态。
下面的例子中,线程将进入死循环,不会退出,因为主线程调用了interrupt()方法时,线程s正在睡眠。
正确的方法应该在异常中调用Thread.currentThread().interrupt();
public static void main(String[] args) throws InterruptedException
{
Thread s = new Thread(){
public void run(){
while(!interrupted()){
System.out.println("------");
try{
sleep(5000);
} catch (InterruptedException e) {
//Thread.currentThread().interrupt();
System.out.println("异常");
}
System.out.println(".......");
}
}
};
s.start();
Thread.currentThread().sleep(2000);
s.interrupt();
}
2.synchronized与wait区别
synchronized不会让线程进入对象的等待队列,线程不会停止,而wait表示将线程放入到对象的等待队列中,只有当其他的线程调用了notify,notifyAll时,jvm才会调度该线程
3.静态synchronized
synchronized表示同步的对象为当前对象,静态synchronized表示锁定的是class对象
4.stop方法用来停止线程不安全,当一个线程被stop时,它会立即释放它锁定的所有对象的锁,这会使得各个对象处于不一致的状态中,要停止一个线程,使用一个变量来标示
分享到:
相关推荐
java 线程中的 interrupt,isInterrupt,interrupted 方法详解 在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将...
但是,由于这种方法可能导致数据不一致和资源泄露,因为它不给线程提供任何清理的机会,因此在Java 1.2之后被标记为过时,并且强烈建议不要使用。`stop()`会抛出一个`ThreadDeath`异常来强制停止线程,即使在`try-...
Java(TM)SE Development Kit 6,简称JDK 6,是Java开发工具包的一个重要版本,主要用于...无论是初学者还是经验丰富的开发者,理解并掌握JDK 6的使用都是必要的,因为它为Java编程提供了一个稳定和强大的开发环境。
* interrupted 是“中断”的英语单词,在 Java 语言中经常使用,例如中断线程的处理; * int 是“整型”的英语单词,在 Java 语言中经常使用,例如整型变量的处理; * item 是“元素”的英语单词,在 Java 语言中...
- interrupt()方法用于中断线程,isInterrupted()和interrupted()检查线程是否被中断,通常配合循环使用,中断标志可以作为退出循环的条件。 通过深入学习《JAVA并发编程艺术》,开发者能更好地理解并发编程的原理...
8. **并发集合类**:Java提供了并发安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们内部实现了线程安全的算法,可以在多线程环境下高效使用。 9. **线程中断**:`interrupt...
- **线程生命周期**: Java线程有四种主要状态:新建(`New`)、运行(`Running`)、中断(`Interrupted`)和死亡(`Dead`)。这些状态反映了线程在其生命周期中的不同阶段。 ### 6. Java类的根 - **根类**: `java.lang....
Java 基础知识点大全 Java 是一门广泛应用于开发的编程语言,具有跨平台、面向对象、安全等特点。本文将对 Java 语言的基础知识点进行总结和介绍。...* Interrupted():中断的,用于表示 Java 中断的类型。
Java推荐使用更安全的中断机制,即通过`Thread.interrupt()`方法向线程发送中断信号,然后在线程的run方法中定期检查`isInterrupted()`或`interrupted()`状态来优雅地停止线程。这种方式允许线程清理资源并正常退出...
可以使用Thread.interrupted()或isInterrupted()方法来检查线程是否已被中断。 1.22 如何处理InterruptedException。当线程被中断时,会抛出InterruptedException,一般需要在catch块中处理,恢复线程的中断状态。 ...
Java线程的启动是通过Thread类的start方法实现的,Thread提供了终止、中断和等待等方法,如interrupt、interrupted和join。Java线程的实现包括操作系统线程,对于线程操作,应该考虑线程池的使用,这涉及到线程的...
Java提供了多种方式创建线程,包括继承`Thread`类、实现`Runnable`接口以及使用`ExecutorService`。继承`Thread`直接创建线程,实现`Runnable`接口则可以通过`Thread`对象启动,`ExecutorService`是Java 5引入的...
Java的库函数提供了使用HTTP和FTP协议来发送和接收信息的方法,这对于开发网络应用非常关键。 - **HTTP协议**:用于Web应用程序的数据交换。 - **FTP协议**:用于文件传输。 - **Socket编程**:通过Socket进行数据...
推荐使用interrupt()方法来中断线程,并在run()方法中检查isInterrupted()或interrupted()状态,以优雅地退出线程。 六、线程池 Java提供ExecutorService和ThreadPoolExecutor等工具类来管理线程池,可以有效地复用...
Java提供了wait()、notify()和notifyAll()方法进行线程间的通信,但这需要在同步控制块(synchronized)中使用。Java 5引入了BlockingQueue阻塞队列,提供了一种更安全的线程间通信方式,如ArrayBlockingQueue、...
interrupt()用于中断线程,配合isInterrupted()或interrupted()检查线程是否被中断。 4. 同步与锁机制 在多线程环境中,数据安全和一致性问题至关重要。Java提供了synchronized关键字来实现线程同步,确保同一时间...
- `isInterrupted()`和`interrupted()`:检查线程是否被中断。 - 异常处理:`ThreadDeath`是线程中断抛出的异常,通常不需要捕获,但子线程可能会抛出其他异常,需要在主线程中捕获。 6. **线程池** - `...
4. **线程通信**:Java的wait(), notify(), notifyAll()方法用于线程间的通信,它们必须在同步块或同步方法中使用。另外,BlockingQueue阻塞队列也是线程间通信的一种有效手段。 5. **线程池**:ExecutorService和...
总的来说,Java的中断机制提供了一种安全且灵活的方式来停止线程,通过结合使用`interrupt()`, `isInterrupted()`, 和 `interrupted()`方法,以及妥善处理`InterruptedException`,可以确保线程在适当的时候优雅地...