`
louis1987
  • 浏览: 10049 次
  • 性别: Icon_minigender_1
  • 来自: 福州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
创建线程可以是继承Thread类,也可以是声明实现 Runnable 接口的类
线程:是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。
线程状态
1.NEW
刚刚new出来还未调用start()方法都处于NEW状态。
2.RUNNABLE
正在java虚拟机中国之行的线程处于这种状态。是调用了start()方法后的状态。
3.BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。 阻塞与等待不同,阻塞通常是得不到所需要的资源而被迫停下来等待。
4.WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
5.TIMED_WAITING
等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
6.TERMINATED
已退出的线程处于这种状态。有两种情况会让线程退出,其一是run方法中的任务执行完成,其二是线程执行时出现异常。
java的线程状态只有如上6中,他们以enum形式被定义在Thread.State中。

join()
阻塞当前线程,然后让接受者完成任务之后,才能继续执行其他任务。

interrupt() 中断
(1).Thread.currentThread().interrupt();  单独执行不会报异常,能中断线程。
(2).Thread.currentThread().interrupt(); 执行之后再执行
Thread.sleep(100); 报java.lang.InterruptedException异常,不会中断线程。
(3).Thread.sleep(100); 执行之后再执行
Thread.currentThread().interrupt(); 不会报异常,且会中断线程。
class ThreadDemo01 {
	public static void main(String[] args) {
		TB tb = new TB();
		tb.start();
		try {
			tb.join();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		int i = 0;
		while ((i++) < 10) {
			System.out.println("-------");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
class TB extends Thread {
	public void run() {
		super.run();
		int i = 0;
		while (!Thread.currentThread().isInterrupted() && (i++) < 20) {
			System.out.println("---->B");
			//if(i == 10) Thread.currentThread().interrupt();//在sleep之前调用,将不能终止线程  
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (i == 10)
				Thread.currentThread().interrupt();//在sleep之后调用,将能终止线程
		}
	}
}


yield()
屈服,让步

setDaemon(true)
tb.setDaemon(true); 设置守护线程
守护线程的用途就是为其他线程提供服务。当被服务者死亡后,其也就没有存在的价值,也就跟着去死了。
class DeamonDemo02 {

	public static void main(String[] args) {
		TB tb = new TB();
		tb.setDaemon(true);//设置为守护线程
		tb.start();
		int i = 0;
		while ((i++) < 10) {
			try {
				Thread.sleep(200);
				System.out.println(i);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
	}
}
class TB extends Thread {
	public void run() {
		super.run();
		int i = 0;
		while (!Thread.currentThread().isInterrupted() && (i++) < 20) {
			System.out.println("---->B");
			//if(i == 10) Thread.currentThread().interrupt();//在sleep之前调用,将不能终止线程  
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (i == 10)
				Thread.currentThread().interrupt();//在sleep之后调用,将能终止线程
		}
	}
}

分享到:
评论

相关推荐

    C#多线程复习题目80道+答案

    此资源有利于初学者巩固C#多线程的基础知识,内有80道练习题及答案。

    E05_多线程复习.pdf

    在计算机科学中,多线程是并发编程的重要概念,它允许多个任务在同一时间执行,提高了系统的效率和响应性。本文将深入探讨多线程的相关知识点。 1. **进程与线程** - **进程**:是操作系统分配资源的基本单位,每...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能的应用程序。本压缩包包含6个C#.NET多线程实例,涵盖了多线程的基本使用以及更复杂的互斥控制机制...

    多线程应用程序设计

    这一步骤主要目的是为了能够在远程机器上运行多线程程序,同时也可以复习之前的实验内容。 2. **多线程程序设计与实现**:利用pthread库函数编写多线程程序。在这个过程中,需要学习如何创建线程、管理线程间的同步...

    C# WinForm多线程开发复习进程.pdf

    C# WinForm 多线程开发复习进程 C# WinForm 多线程开发是一种复杂的编程技术,用于提高程序的效率和响应速度。多线程开发可以使程序同时执行多个任务,提高程序的效率和性能。但是,多线程开发也存在一些挑战,例如...

    win32多线程程序设计 配套 源码

    标题“win32多线程程序设计 配套 源码”暗示了这是一个关于Windows 32位操作系统平台上的多...对于初学者来说,这些示例提供了宝贵的实践经验,对于有经验的开发者来说,它们则可以用来复习或测试新的多线程编程技巧。

    实验八:Java多线程

    ### 实验八:Java多线程 #### 一、实验目的与知识点概述 在本实验中,我们将深入了解线程与进程的基本概念、它们之间的区别与联系,并掌握多线程技术在Java中的应用方法。具体包括以下几点: 1. **线程与进程的...

    多线程、JVM复习&面试&强化训练100题

    多线程和JVM是Java编程中非常重要的概念,特别是对于进行面试准备的开发者来说,掌握这些知识至关重要。...以上这些知识点都是多线程和JVM复习中的重要内容,掌握这些知识将大大增强面试者的信心,并在面试中占据优势。

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi

    Java飞机游戏

    此次实训不同,在些之前我作了一些准备,对多线程复习了好几编,实训果然派上用场。 通过这次JAVA飞机游戏实训,我对JAVA有了更深刻的认识, 对面向对象,和游戏中必然用到的多线程有了更深理解。实训中,我觉得最...

    多线程的端口扫描/C语言、套接字开发

    通过对网络通信基础知识的复习以及对关键代码片段的解析,我们了解了如何使用Winsock2库进行网络通信,并通过多线程技术提高了端口扫描的效率。此外,还学习了一些实用的网络编程技巧,例如如何构造和解析TCP数据包...

    多线程、JVM复习及面试100题

    在Java编程领域,多线程和Java虚拟机(JVM)是两个至关重要的主题,尤其在面试中常常被考察。本文将围绕这两个核心概念展开,深入解析相关知识点,并结合常见的面试问题进行阐述。 首先,我们来看看多线程。在单核...

    01大数据面试复习----Java基础---集合类、多线程、JVM.zip

    在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...

    系统编程—消息队列—多线程—对话(双线程收发)

    在虚拟机上用消息队列实现对话(双线程收发),即A&lt;-&gt;B; 同时又可以复习多线程和信号捕捉

    10个vc多线程实例

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在Windows环境下,Visual C++(简称VC)提供了强大的多线程支持。标题“10个vc多线程实例”表明这是一个关于使用VC进行多线程编程的教学资源,包含了10个...

    429.427.JAVA基础教程_多线程-复习:线程的创建与常用方法(429).rar

    多线程是Java中的核心特性,它使得程序能够同时执行多个任务,提高了应用程序的效率和响应性。本教程聚焦于Java多线程的创建与常用方法,帮助开发者深入理解这一关键概念。 在Java中,线程的创建主要有两种方式:...

    Java期末复习||应用程序设计-多线程和泛型

    Java中的多线程和泛型是程序设计中的关键概念,它们极大地增强了代码的并发性和可复用性。在Java中,实现多线程有两种主要方式:一是通过继承`Thread`类,二是通过实现`Runnable`接口。通常推荐使用实现`Runnable`...

    计算机后端-Java-Java核心基础-第20章 多线程 03. 复习:线程的创建与常用方法.avi

    计算机后端-Java-Java核心基础-第20章 多线程 03. 复习:线程的创建与常用方法.avi

    多线程讲生产者与消费者

    多线程生产者与消费者,,生产者和消费者的解答网络上有多种线程版本,但却没看到进程版本,所以我就来填补这一“空白”了。PS:使用进程版本的另一个重要原因是,想顺便复习下共享内存。 我们使用信号量来同步,用...

    43道Java多线程高频题整理(附答案背诵版).md

    这份《43道Java多线程高频题整理(附答案背诵版)》资源是一份专门针对Java多线程编程的高频考题集,旨在帮助Java开发者系统掌握多线程的核心概念和实际应用。此资源涵盖了面试和工作中常见的多线程问题,通过详细的...

Global site tag (gtag.js) - Google Analytics