`

java并发编程学习笔记2

阅读更多
  • thread的生命周期
              
package java.lang;

public class Thread implements Runnable {
    public void start();
    public void run();
    public void stop();                                //已废除,勿使用
    public void resume();                              //已废除,勿使用
    public void suspend();                             //已废除,勿使用
    public static void sleep(long millis);
    public static void sleep(long millis,int nanos);
    public boolean isAlive();
    public void interrupt();
    public boolean isInterrupted();
    public static boolean interrupted();
    public void join() throws InterruptedException;
    ......
}
 
            如图所示 ,Thread生命期,需要注意的是,stop和rusume均已经废除
            在这里,着重叙述一下Thread的interrupt方法。
            Thread的stop方法已经被停用了,因此interrupt成了一个“终止线程”的方法,但是他又不是用来终止线程用的,比较绕口,简而言之,interrupt是为了结束线程的阻塞状态,观察interrupt的源码发现,其只是为线程设置了一个中断标记位。Thread.interrupt()方法不会中断一个正在运行的线程,这一方法 实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么, 它将接收到一个中断异常 InterruptedException  InterruptedException ),从而提早地终结被阻塞状态。因此,  如果线程被上述几种方法阻塞,正确的停止线程方式是设置共享变量,并调用interrupt()(注 意变量应该先设置)。如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就 将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。在任何一种情况中,最 后线程都将检查共享变量然后再停止.
public class TestInterrupt extends Thread{
	
	private volatile boolean stop=false;
	
	@Override
	
	public void run(){
		
		System.out.println("thread is running");
		
			try {
				System.out.println("thread is going to sleep");
				if(!stop){
					
					Thread.sleep(10*1000);
				}
				
			    System.out.println("after thread sleep");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				System.out.println("Thread is interupted");
			}
		
		System.out.println("the thread is over!");
	}
	
	
	public static void main(String[]args) throws InterruptedException{
		
		TestInterrupt thread=new TestInterrupt();
		thread.start();
		Thread.sleep(4*1000);
		thread.stop=true;
		thread.interrupt();
		Thread.sleep(3*1000);
		System.out.println("stopping application");
//		System.exit(0);
	}
	
	
	
	
}
  
        打印结果:
thread is running
thread is going to sleep
Thread is interupted
the thread is over!
stopping application
 
        由此可见,在线程阻塞后(sleep),使用interrupt()方法,代码try到中断异常,因此执行catch语句,值得一看的是,run()方法会继续从catch下面的语句执行,而不是跳出,因此会打印语句“the thread is over!”由此可见,中断并不会使线程停止,而是从当前sleep状态唤醒往下执行
 
  • thread的基本使用方法
 
        thread有两种方法使用,一种是直接继承Thread类,另一种是实现Runnable接口,比较而言,最常使用的是Runnable因为Java不支持多继承,因此只是继承Thread不够灵活。
 

 

 
        
2
2
分享到:
评论

相关推荐

    Java并发编程学习笔记.rar

    这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...

    Java并发编程学习笔记

    Java并发编程是Java开发中必不可少的一部分,涉及到多线程、同步机制、线程池以及并发工具类等多个核心知识点。以下是对这些主题的详细说明: 1. **线程安全与锁 Synchronized 底层实现原理**: 线程安全是指在多...

    Java并发编程学习笔记 pdf 多线程编程

    Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...

    java并发编程实践笔记

    ### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...

    java并发编程学习笔记

    ### Java并发编程学习笔记知识点详解 #### 一、Java并发编程概述 Java并发编程是指在Java应用程序中同时执行多个操作的技术。它通过多线程、线程池等机制实现资源的有效利用,提高程序运行效率。Java并发编程的...

    Java并发编程学习笔记.

    2. **并发基础**:Java并发编程的基础包括`Thread.start()`启动线程,`Thread.join()`等待线程结束,以及`Thread.sleep()`让当前线程暂停一段时间。 3. **同步机制**:Java提供了多种同步机制,如`synchronized`...

    Java并发编程系列心得笔记

    Java并发编程系列心得笔记,可以参考,欢迎共同交流学习

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.pdf

    本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    Java并发编程与高并发解决方案笔记-基础篇.docx

    Java并发编程与高并发解决方案是开发高性能应用的关键技术。在基础篇中,主要涉及以下几个重要知识点: 1. **并发编程基础** - **并发**:并发是指在一个时间段内,多个线程交替执行,使得系统看起来像是同时处理...

    Java并发编程

    Java并发编程 学习资料

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.rar

    java并发编程与并发解决方案是自己多年开发和学习的笔记,有助于(ˇˍˇ) 想~进一步提高的java开发工程师或架构师深入的学习java架构并发处理。同时,它也是 在实际工作中多年高并发解决方案和经验的总结

    java并发编程.xmind

    自己总结的java并发编程的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。

    Java并发编程与高并发解决方案-学习笔记

    ### Java并发编程与高并发解决方案知识点总结 #### 一、并发与高并发基本概念 ##### 1.1 并发 - **定义**: 指一个程序在同一时刻拥有两个或更多的线程,这些线程可以在单核或多核处理器上运行。 - **单核处理器上...

    JUC并发编程学习笔记(硅谷)

    "JUC并发编程学习笔记(硅谷)"很可能包含了关于Java并发工具集(Java Util Concurrency, JUC)的深入理解和实战经验。JUC是Java标准库提供的一套强大的并发处理工具,它极大地简化了多线程编程,提高了程序的可读性...

    《Java并发编程之美》学习笔记 《Java concurrency programming》learning note.zip

    《Java并发编程之美》学习笔记 《Java concurrency programming》learning note

    Java并发编程与高并发解决方案-学习笔记.pdf

    学习Java并发编程时,锁的概念是无法回避的。锁是同步的一种机制,用来控制多个线程访问共享资源的顺序。在Java中,锁主要有两种类型:内置锁和显示锁。内置锁使用synchronized关键字实现,而显示锁则是通过java....

    java并发库学习笔记

    Java并发库是Java平台中的核心组件,它为多线程编程提供了丰富的工具和接口,使得开发者能够高效、安全地实现并发程序。在Java并发库中,ExecutorService接口和相关的线程池是其核心部分,它们提供了线程管理和任务...

    Java线程编程学习笔记(二)

    这篇“Java线程编程学习笔记(二)”很可能是对Java并发编程深入探讨的一部分,特别是涉及多线程示例的实践应用。我们将从标题、描述以及标签来推测可能涵盖的知识点,并结合"Multi-Threads Demo"这一压缩包文件名来...

Global site tag (gtag.js) - Google Analytics