`

Thread

 
阅读更多

线程:创建、就绪、运行、阻塞、终止

 

线程中断结束:

不能使用interrupt()或stop()方法,可通过在线程实现类中,设置一个boolean类型开关控制

 

Thread类方法:

currentThread(): 当前线程对象

sleep(long milisec): 

yield(): 暂停当前执行的线程对象,并执行其他线程

 

Thread对象方法:

interrupt(): 中断线程。只是这种中断,是不安全的,会导致未来得及关闭的资源无法关闭

stop(): 结束线程,比interrupt()更暴力

join(): 将t线程合并到当前线程,等待t线程终止,再继续向下执行。相当于方法调用

setPriority(): 更改线程优先级

MIN_PRIORITY = 1

NORM_PRIORITY = 5

MAX_PRIORITY = 10

 

 

Object对象方法:

wait(): 导致当前线程等待,指导其他线程调用此对象的notify()或notifyAll()方法

notify(): 唤醒在此对象监视器上等待的单个线程

notifyAll(): 唤醒在此对象监视器上等待的所有线程

 

wait()和sleep()的区别:

相同点: 都是让当前线程进入等待状态

不同点: wait()后,锁不归我所有,必须等待被唤醒才能去抢锁

        sleep(),锁还是归我所有,一段时间后自动醒来

 

synchronized: 保证同一时间只能由一个线程访问同一资源

 

死锁:互斥、占有等待、非剥夺、循环等待

 

public class DeadLockTest implements Runnable {
	int flag = 1;
	static Object o1 = new Object();
	static Object o2 = new Object();

	public void run() {
		System.out.println(flag);
		if (flag == 1) {
			synchronized (o1) {
				try {
					Thread.sleep(1000);
					System.out.println("o1");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				synchronized (o2) {
					System.out.println("1");
				}
			}
		}

		if (flag == 0) {
			synchronized (o2) {
				try {
					Thread.sleep(1000);
					System.out.println("o2");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				synchronized (o1) {
					System.out.println("0");
				}
			}
		}
	}

	public static void main(String[] args) {
		DeadLockTest t1 = new DeadLockTest();
		DeadLockTest t2 = new DeadLockTest();

		t1.flag = 1;
		t2.flag = 0;

		new Thread(t1).start();
		new Thread(t2).start();
	}
}

 避免死锁:

1. 让所有线程按同样顺序获取一组锁,可消除a和b拥有者分别等待对方资源的问题

2. 将多个锁组成一组放到同一锁下面。

3. 将那些不会阻塞的资源用变量标识出来。

public class DeadLockResolved extends Thread {
	static Object o1;
	static Object o2;

	public void run() {
		synchronized (this) {
			try {
				Thread.sleep(1000);
				System.out.println("o1");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			System.out.println("o2");
		}
	}
	
	public static void main(String[] args) {
		DeadLockResolved d1 = new DeadLockResolved();
		DeadLockResolved d2 = new DeadLockResolved();
		
		d1.start();
		d2.start();
	}
}

 

分享到:
评论

相关推荐

    thread thread thread thread

    thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread ...

    5,RT Thread操作系统教程及资料_rtthread_RT-Thread_

    RT Thread是一款轻量级、高性能、组件丰富的实时操作系统(RTOS),尤其适合于嵌入式系统。这个压缩包中包含的“5,RT Thread操作系统教程及资料(第三方合作伙伴)”很可能是由RT Thread社区或者合作伙伴提供的学习...

    rt-thread-3.1.3_rtthread_RT-Thread_nano_rtthreadopenocd_RT-Threa

    RT-Thread是一个开源的实时操作系统(RTOS),专为嵌入式系统设计,具有高可靠性、低功耗和轻量级的特点。"rt-thread-3.1.3" 是该操作系统的特定版本,代表着该版本在功能和性能上的优化与改进。 RT-Thread Nano是...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    `Thread`类是.NET框架提供的用于创建和管理线程的核心类。其中,`Thread.IsAlive`属性是一个非常重要的成员,它允许开发者检查线程的当前状态,以确定线程是否已经启动并且仍在运行。在理解`Thread.IsAlive`属性的...

    RT-Thread中文文档

    RT-Thread是一款由中国开源社区贡献的物联网操作系统,它具备极强的可伸缩性。可伸缩性体现在其核心可以在最小的ARMCortex-M0微控制器上运行,到中等规模的ARMCortex-M3/M4/M7系统,以及更高性能的MIPS32和ARMCortex...

    RTThread Stm32 标准库参考工程.zip_RT-Thread STD库_rtos stm32_rtthread_rt

    RTThreadSTM32标准库参考工程是一个专门为基于STM32微控制器的实时操作系统(RTOS)RT-Thread设计的示例项目。RT-Thread是一个开源、轻量级且功能强大的RTOS,广泛应用于物联网(IoT)设备和嵌入式系统。这个压缩包...

    threadx中文资料

    ### ThreadX概述与嵌入式实时系统 #### 一、ThreadX简介 ThreadX是一款由ExpressLogic公司开发的高性能实时操作系统(RTOS),主要用于嵌入式系统开发领域。该操作系统以其出色的稳定性和实时性著称,并且具备较高的...

    ThreadX中文学习手册

    ### ThreadX中文学习手册知识点概览 #### 一、ThreadX概述 - **定义与特点**:ThreadX是由Express Logic公司开发的一款高性能实时操作系统(RTOS)内核,专门针对嵌入式应用设计。与传统的RTOS相比,ThreadX具有更...

    ThreadX-中文文档

    ### ThreadX实时操作系统知识点 #### 一、ThreadX概述 - **定义与特点**:ThreadX是一款由ExpressLogic公司开发的高性能实时操作系统内核。它以其高性能、通用性及强大的可移植性著称,适用于各种嵌入式系统,尤其...

    rt-thread入门教程PPT

    RT-Thread 入门教程 PPT RT-Thread 是一款国产的嵌入式操作系统,诞生于 2006 年,经过十多年的积淀,已经成为一款知名度较高、口碑极佳、高度稳定可靠的实时操作系统。RT-Thread 作为一款中间件平台,具有极强的...

    AT32F435移植THreadX;AT32F437移植THreadX,移植最新版THreadX

    STM32可以有STM32CubeMX轻松移植THreadX,雅特力从AT43F435/437系列开始不能完全兼容STM32,用不了THreadX了。 本移植采用最新(截至2023年3月12号)的AT32F435/437固件库V2.1.2,THreadX版本V6.2.1;依照雅特力官方...

    threadX的VC开发环境

    ThreadX是一款广泛应用于嵌入式系统的实时操作系统(RTOS),它为开发者提供了高效、可靠的多线程环境,以实现复杂的实时任务调度。ThreadX的核心特性包括轻量级内核、优先级继承、时间片轮转、内存管理以及中断处理...

    ThreadX5.1 Win32 Demo

    ThreadX是一款嵌入式实时操作系统(RTOS),由Express Logic公司开发。这个"ThreadX5.1 Win32 Demo"是2009年的最新版本,它提供了在Win32平台上运行ThreadX操作系统的演示环境。了解ThreadX对于深入学习嵌入式系统...

    实时操作系统ThreadX剖析

    实时操作系统(RTOS)ThreadX剖析 实时操作系统ThreadX是一种专门为嵌入式系统设计的操作系统,它能够满足实时性要求较高的任务调度和管理需求。在嵌入式系统的领域中,实时性是系统能否及时响应外部事件并进行处理...

    RT-Thread API参考手册.pdf

    RT-Thread是一款由国内团队开发并维护的嵌入式实时操作系统,拥有完全的自主知识产权。自成立以来,RT-Thread经过长时间的发展,已经成为了一个功能强大、组件丰富的物联网操作系统,尤其适应于资源受限的微控制器...

    RT-Thread常见问题

    RT-Thread常见问题解答 本文将对RT-Thread操作系统开发中常见的问题进行解答,涵盖了线程控制、日志输出、线程删除、静态和动态线程定义等方面。 一、线程控制问题 1. 创建线程后,使用list_thread()显示线程的...

    RT-THREAD 编程指南 中文手册

    RT-Thread是一个流行的开源实时操作系统,广泛应用于嵌入式系统和物联网领域。它具有高度模块化、可裁剪的内核设计,适合资源有限的微控制器使用。以下是根据提供的文件信息,详细的RT-Thread编程指南相关知识点: ...

    threadx 在arm9 上的移植指导

    ### ThreadX在ARM9上的移植指导 #### 一、ThreadX简介与工作原理 ThreadX是一款由Express Logic公司开发的实时操作系统(RTOS),以其高效、可靠及轻量级等特点著称,广泛应用于嵌入式系统领域。ThreadX采用抢占式...

    RT-Thread.pdf

    RT-Thread是一款面向嵌入式设备的开源实时微操作系统(RTOS),其具备高度的模块化和可配置性,非常适合资源受限的单片机平台。作为一款轻量级操作系统,RT-Thread提供了完整的实时操作系统所需的功能,包括线程管理...

    RT-thread相关介绍与面试问题+答案

    ### RT-thread相关介绍与面试问题解析 #### 一、RT-thread概述 RT-thread是一款轻量级的嵌入式实时多线程操作系统,它支持多任务处理,并具备良好的移植性、可裁剪性和可扩展性。RT-thread的核心架构包括内核、...

Global site tag (gtag.js) - Google Analytics