Java 多线程

简介: Java 多线程

文章目录

多线程

定义

多线程定义:可以让程序同时做多件事情

作用

多线程作用:提高程序效率,发挥多核CPU 的优势

应用场景

多线程应用场景:只要想让多个事情同时运行就需要用到多线程

线程

线程:应用软件中互相独立,可以同时运行的功能

并发

并发:在同一时刻,有多个指令在单个CPU上交替执行

并行

并行:在同一时刻,有多个指令在单个CPU上同时执行

start(启动线程)

start:调用start()方法表现出多线程的特性

run(启动线程)

调用 run()方法,代码还是同步执行的,但等待一个线程的 run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其 run()方法里面的代码。

线程声明周期状态

NEW:线程刚创建还没有启动

Runnable:线程以触发start方法,正常运行状态

Blocked:线程阻塞,等待获取到锁,获取到进入Runnable状态继续运行

Waiting:表示线程处于无效等待状态,如果是wait()方法设置等待,那么就通过notifyAll()方法唤醒,唤醒后进入Runnable状态继续运行

Timed_waiting:表示线程进入到有限时间等待,不如sleep(3),等待3秒后线程继续运行,进入Runnable状态继续运行

Terminated:线程执行完后,进入终止状态

wait()和sleep区别

sleep和 wait 方法都可以放弃 CPU 一定的时间,不同的是如果线程持有某个对象的监视器,sleep 方法不会放弃这个对象的监视器,wait 方法会放弃这个对象的监视器(sleep在指定时间结束后自动继续执行线程,而wait需要等待唤醒)

多线程同步方法

Synchronized 关键字和Lock 锁实现,分布式锁等

死锁

死锁就是两个线程相互等待对方释放对象锁。

多线程如何进行通信

wait/notify

守护线程

setDaemon():设置守护线程

当其它线程执行完毕之后,守护线程会陆续结束

礼让线程

yield():设置礼让线程

礼让线程:暂停当前正常执行的线程对象,让其他有相同优先级的线程执行

插入线程

join():设置插入线程

A线程设置为插入线程后,当A线程执行完毕后,B线程在开始执行

阻塞队列

创建ArrayBlockingQueue对象进行实现

当前线程执行完后才进行退出

notify和notity区别

notityAll:唤醒当前锁对象中的线程

notity:单个线程唤醒时会使用到

目录
相关文章
|
2天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
12 0
|
2天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
8 0
|
2天前
|
Java API
详细探究Java多线程的线程状态变化
Java多线程的线程状态主要有六种:新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)。线程创建后处于NEW状态,调用start()后进入RUNNABLE状态,表示准备好运行。当线程获得CPU资源,开始执行run()方法时,它处于运行状态。线程可以因等待锁或调用sleep()等方法进入BLOCKED或等待状态。线程完成任务或发生异常后,会进入TERMINATED状态。
|
2天前
|
存储 安全 Java
Java多线程中线程安全问题
Java多线程中的线程安全问题主要涉及多线程环境下对共享资源的访问可能导致的数据损坏或不一致。线程安全的核心在于确保在多线程调度顺序不确定的情况下,代码的执行结果始终正确。常见原因包括线程调度随机性、共享数据修改以及原子性问题。解决线程安全问题通常需要采用同步机制,如使用synchronized关键字或Lock接口,以确保同一时间只有一个线程能够访问特定资源,从而保持数据的一致性和正确性。
|
2天前
|
监控 安全 Java
Java多线程的使用
Java多线程允许程序同时执行多个任务,提高了系统的整体性能和响应速度。通过创建Thread类或其子类的实例,或使用Runnable接口,Java开发者可以定义并发执行的代码段。多线程在处理复杂任务、资源共享、网络通信等方面具有显著优势,但也需要注意线程安全、同步和死锁等问题。Java提供了丰富的API和工具来处理这些并发问题,使多线程编程更加高效和可靠。
|
2天前
|
API
java-多线程-CountDownLatch(闭锁) CyclicBarrier(栅栏) Semaphore(信号量)-
java-多线程-CountDownLatch(闭锁) CyclicBarrier(栅栏) Semaphore(信号量)-
6 1
|
2天前
|
安全 Java 程序员
Java基础18-一文搞懂Java多线程使用方式、实现原理以及常见面试题(二)
Java基础18-一文搞懂Java多线程使用方式、实现原理以及常见面试题(二)
23 4
|
2天前
|
Java 程序员 调度
Java基础18-一文搞懂Java多线程使用方式、实现原理以及常见面试题(一)
Java基础18-一文搞懂Java多线程使用方式、实现原理以及常见面试题(一)
19 0
Java基础18-一文搞懂Java多线程使用方式、实现原理以及常见面试题(一)
|
2天前
|
存储 安全 Java
Java并发基础-线程间通信
Java并发基础-线程间通信
5 0
|
7天前
|
Java 调度 数据库
Java中的多线程编程:基础与实践
【6月更文挑战第7天】本文将深入探讨Java中的多线程编程,包括其基本概念、创建方法以及在实际应用中的一些技巧。我们将通过实例来展示如何在Java中有效地使用多线程,以提高程序的性能和响应能力。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解。