`

Java多线程之基础操作

阅读更多
参考自http://developer.51cto.com/art/200906/132339.htm 及其一系列的网页。做个汇总。

一:创建并运行线程:

    通过继承Thread,重载其public void run();或者实现Runnable接口, 建立线程;
      RunnableT t1 = new MyRunnable();             //RunnableT 为实现runnable接口的类
      Thread thread1 = new Thread(t1, "MyThread1"); //线程名为MyThread1
      Thread thread2 = new Thread(t1); 

              调用start()方法运行线程;调用isAlive()方法查看线程是否运行状态

二:挂起和唤醒线程:
   suspend()/resume() 是deprecated方法,suspend()可以挂起其他线程,sleep()仅能休眠自己...sleep方法需要捕捉异常,当其休眠的时候使用其interrupt方法中断线程会抛出InterruptedException异常 

三:终止或者中断线程的方法:

1,使用退出标识终止
 public class ThreadFlag extends Thread  
 {  
     public volatile boolean exit = false;  
  
     public void run()  
     {  
         while (!exit);  
     }  
     public static void main(String[] args) throws Exception  
     {  
         ThreadFlag thread = new ThreadFlag();  
         thread.start();  
         sleep(5000); // 主线程延迟5秒  
         thread.exit = true;  // 终止线程thread  
         thread.join();  
         System.out.println("线程退出!");  
     }  
 }  


2,使用stop方法终止,thread.stop();危险慎用

3,使用interrupt方法终止线程
   若处于阻塞状态,比如使用了sleep方法,抛出InterruptedException并退出

/** 测试线程的中止与恢复
 *  Thread.interrupted(): 若thread中断,返回true并恢复thread,故再次调用返回false
 *  thread.interrupt() 
 * */
public class ThreadInterrupt extends Thread  
 {  
     public void run()  
     {  
         try 
         {  
             sleep(50000);  // 延迟50秒  
         }  
         catch (InterruptedException e)  
         {  
             System.out.println(e.getMessage()); 
             Thread.interrupted();
             System.out.println("hello");
         }  
         System.out.println("ThreadInterrupt End");
     }  
     public static void main(String[] args) throws Exception  
     {  
         Thread thread = new ThreadInterrupt();  
         thread.start();  
         System.out.println("在50秒之内输入任意字符中断线程!");  
         System.in.read();  
         thread.interrupt();  
         System.out.println(thread.isAlive());
         thread.join();  
         System.out.println("线程已经退出!");  
     }  
 }  


使用interrupt(),线程在正常运行状态指示中止,可以恢复。参考的网址上讲的是错的这里。
/** 证明interrupt只是中断而已,可以恢复,而非结束,
 * 引用网址上讲的的是错的 
 * */
public class TestInterrupt extends Thread{
	public void run(){
		for(long  i =0; i<1000000000; i++){
		}
		System.out.println("thread end");
	}
	
	public static void main(String args[]){
		Thread t=new TestInterrupt();
		t.start();
		System.out.println("before t interrupted");
		t.interrupt();
		System.out.println("after");
		try {
			t.join();
		} catch (InterruptedException e) {
		}
		System.out.println("main end");
	}
}


在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法 isInterrupted(),这两个方法的区别是interrupted用来判断当前线是否被中断,清除中断状态;而isInterrupted可以用来判断其他线程是否被中断,不清除中断状态。

join()方法: 若线程A中调用了B.join(),则A挂起等待B运行完后运行。
分享到:
评论

相关推荐

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程之基础篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    java多线程编程实战指南 核心篇 代码

    随着现代处理器的生产工艺从提升...《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。

    Java多线程之基础篇(二).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    java多线程安全性基础介绍.pptx

    java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...

    Java多线程之进阶篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    解析Java的多线程机制

    Unix操作系统环境下,应用程序可以利用fork... 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式应用系统中多客户端的并发访问以及提高服务器的响应效率奠定坚实基础。

    Java多线程编程.pdf

    Java线程是Java语言中一个非常重要的部分,尤其是在Java5以后,Java对多线程做了很多扩展,大大增强了Java多线程编程的能力。这个专题涵盖了Java线程的概念和基本操作,并包含了一些高阶的设计及应用方法。

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    多线程,java基本知识,linux基本命令操作知识

    多线程,java基本知识,linux基本命令操作知识,

    Java多线程之进阶篇(二).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    本资源包“Java多线程与线程安全实践-基于Http协议的断点续传....通过这个实践项目,学生不仅能够加深对Java多线程和线程安全概念的理解,还能提升解决实际问题的能力,为未来的软件开发工作打下坚实的基础。重新回答||

    Java毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传.rar

    Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程和线程安全,以及如何基于Http协议实现断点续传功能。该项目提供了一个完整的源代码包,可以作为学习...

    一篇文章弄懂Java多线程基础和Java内存模型

    文章目录一、多线程的生命周期及五种基本状态二、Java多线程的创建及启动1.继承Thread类,重写该类的run()方法2.通过实现Runnable接口创建线程类3.通过Callable和Future接口创建线程三、Java内存模型概念四、内存间...

    吃放水果 java(多线程)

    吃放水果的gui开发,适合 java初学者(多线程)

    【JAVA基础】JAVA多线程编程详解

    多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储...

    Java线程详解.ppt

    如果一个程序中要实现两段程序代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。 程序启动运行时,就自动产生了一个线程,main方法就是在这个线程上运行的,当不再产生...

    Java多线程编程的优点和缺点

    支持并发编程:多线程编程是支持并发编程的基础,可以处理多个并发任务,如服务器处理多个客户端请求。 缺点: 竞态条件(Race Conditions):多个线程访问共享资源时可能引发竞态条件,导致数据不一致性和程序错误...

    面向对象与多线程java实验.zip

    由此了解软件开发的一般过程,深入理解面向对象语言的基本概念和基本原理,理解和掌握继承与多态、异常处理、输入输出流、GUI设计、JDBC数据库操作、网络编程、多线程等技术;熟练掌握在Java语言环境下,上述技术的...

    java多线程综合实验2020年1月武汉理工大学1—7次实验源代码(运行通过).rar

    由此了解软件开发的一般过程,深入理解面向对象语言的基本概念和基本原理,理解和掌握继承与多态、异常处理、输入输出流、GUI设计、JDBC数据库操作、网络编程、多线程等技术;熟练掌握在Java语言环境下,上述技术的...

Global site tag (gtag.js) - Google Analytics