Java多线程的知识点

简介: Java多线程的知识点

1.并发与并行🌭

并发:

指两个或多个事件在同一个时间段内发生。

并行:

并行:指两个或多个事件在同一时刻发生(同时发生)。

2.线程与进程🌭

进程:🍔

是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

线程:🍔

线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。


线程的创建🌭


构造方法:🍔

public Thread() :分配一个新的线程对象。

public Thread(String name) :分配一个指定名字的新的线程对象。

public Thread(Runnable target) :分配一个带有指定目标新的线程对象。

public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字。


一些常见的方法:🍔

public String getName() :获取当前线程名称。

public void start() :导致此线程开始执行; Java虚拟机调用此线程的run方法。

public void run() :此线程要执行的任务在此处定义代码。

public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。

public static Thread currentThread() :返回对当前正在执行的线程对象的引用。


wait()方法🌭

wait方法的作用就是使当前执行的代码进行等待,wait()方法就是Object类的方法,该方法是用来将当前线程置入"预执行队列中",并且在wait方法()所在的代码处停止执行,直到接到通知或被中断中止

wait方法只能在同步方法中或同步块中调用。如果调用的wait时,没有持有适当的锁,会抛出异常。

wait()方法执行后,当前线程释放锁,线程与其它线程竞争重新获取锁。

notify() 方法🌭

notify方法就是使停止的线程继续运行


方法notify()也要在同步方法或同步块中调用,该方法是用来通知那些可能等待该对象的对象锁的其它线程,对其发出通知notify,并使它们重新获取该对象的对象锁。如果有多个线程等待,则有线程规划器随机挑选出一个呈wait状态的的线程。

在notify()方法后,当前线程不会马上释放该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退出同步代码块之后才会释放对象锁。

查看线程的运行状态🌭

线程有六种状态分别是:新建、运行、阻塞、等待、计时等待和终止


实现思路:🌭


创建一个类;ThreadState,实现Runnable接口

定义三个方法:

.waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法

.waitForYears();使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法

.notifyNow():唤醒由调用wait方法()进入等待状态的线程


代码实现🌭  

package cn.xiaoxuzhu.daily;
/**
 * @author  小王同学;
 * @version 1.0.0
 * Description:
 *
 * 1.题目描述:
 * 题目:线程有6个状态:新建,运行,阻塞,等待,计时,等待和终止
 * new新进程时,线程处于新建状态。
 * 调用start()方法,线程处于运行状态
 * 对于一些含有时间参数的方法如Thread类的sleep方法();可以使线程处于计时等待状态
 * 当run()方法运行完毕或出现异常时,线程处于终止状态。
 * 实现:查看线程的运行状态。
 *
 * 2.解题思路:
 * 创建一个类;ThreadState,实现Runnable接口
 *
 * 定义三个方法
 * .waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
 * .waitForYears();使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
 * .notifyNow():唤醒由调用wait方法()进入等待状态的线程
 *
 * 使用Thread类的getState()方法,可以获得线程的状态
 * 该方法的返回值是Thread.state
 *
 */
public class ThreadState implements Runnable{
    public  synchronized  void waitForASecond()throws InterruptedException{
        wait(500); //使当前线程等待0.5秒或其他线程调用notify()或者notifyAll()方法
    }
    public  synchronized void waitForYears()throws  InterruptedException{
        wait();  //使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
    }
    public  synchronized void  notifyNow()throws  InterruptedException{
        notify(); //唤醒由调用wait方法()进入等待状态的线程
        Thread.sleep(100); //留时间打印
    }
    @Override
    public void run() {
        try {
            waitForASecond(); //在新线程中运行waitForASecond();方法
            waitForYears();   //在新线程中运行waitForYears()方法
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}
package cn.xiaoxuzhu.daily;
public class _67 {
    public static void main(String[] args) throws InterruptedException {
        ThreadState state=new ThreadState(); //创建state对象
        Thread thread=new Thread(state); //利用state对象创建Thread对象
        System.out.println("新建线程:"+thread.getState()); //输出线程状态
        thread.start(); //调用thread对象的start()方法,启动新线程
        System.out.println("启动线程:"+thread.getState()); //输出线程状态
        Thread.sleep(100);//当前线程休眠0.1秒,使新线程运行waitForASecond()方法
        System.out.println("计时等待:"+thread.getState()); //输出线程状态
        Thread.sleep(1000);//当前线程休眠1秒,使新线程运行waitForYears()方法
        System.out.println("等待线程:"+thread.getState());//输出线程状态
        state.notifyNow();//调用state的notifyNow()方法
        System.out.println("唤醒线程:"+thread.getState());//输出线程状态
        Thread.sleep(1000);;//当前新线程休眠1秒,使新线程结束
        System.out.println("终止线程:"+thread.getState()); //输出进程状态

92b883454ed34af3b3d6eaef8a8871ee.png

以上就是 小王同学带给大家的多线程基础知识

相关文章
|
7天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
1天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
3天前
|
Java
深入理解Java中的多线程编程
本文将探讨Java多线程编程的核心概念和技术,包括线程的创建与管理、同步机制以及并发工具类的应用。我们将通过实例分析,帮助读者更好地理解和应用Java多线程编程,提高程序的性能和响应能力。
15 4
|
11天前
|
Java 调度 开发者
Java并发编程:深入理解线程池
在Java的世界中,线程池是提升应用性能、实现高效并发处理的关键工具。本文将深入浅出地介绍线程池的核心概念、工作原理以及如何在实际应用中有效利用线程池来优化资源管理和任务调度。通过本文的学习,读者能够掌握线程池的基本使用技巧,并理解其背后的设计哲学。
|
2天前
|
安全 Java 调度
Java 并发编程中的线程安全和性能优化
本文将深入探讨Java并发编程中的关键概念,包括线程安全、同步机制以及性能优化。我们将从基础入手,逐步解析高级技术,并通过实例展示如何在实际开发中应用这些知识。阅读完本文后,读者将对如何在多线程环境中编写高效且安全的Java代码有一个全面的了解。
|
10天前
|
缓存 监控 Java
Java中的并发编程:理解并应用线程池
在Java的并发编程中,线程池是提高应用程序性能的关键工具。本文将深入探讨如何有效利用线程池来管理资源、提升效率和简化代码结构。我们将从基础概念出发,逐步介绍线程池的配置、使用场景以及最佳实践,帮助开发者更好地掌握并发编程的核心技巧。
|
7天前
|
Java 调度 开发者
Java中的多线程基础及其应用
【9月更文挑战第13天】本文将深入探讨Java中的多线程概念,从基本理论到实际应用,带你一步步了解如何有效使用多线程来提升程序的性能。我们将通过实际代码示例,展示如何在Java中创建和管理线程,以及如何利用线程池优化资源管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你更好地理解和应用多线程编程。
|
4月前
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。
|
1月前
|
存储 安全 Java
解锁Java并发编程奥秘:深入剖析Synchronized关键字的同步机制与实现原理,让多线程安全如磐石般稳固!
【8月更文挑战第4天】Java并发编程中,Synchronized关键字是确保多线程环境下数据一致性与线程安全的基础机制。它可通过修饰实例方法、静态方法或代码块来控制对共享资源的独占访问。Synchronized基于Java对象头中的监视器锁实现,通过MonitorEnter/MonitorExit指令管理锁的获取与释放。示例展示了如何使用Synchronized修饰方法以实现线程间的同步,避免数据竞争。掌握其原理对编写高效安全的多线程程序极为关键。
50 1
|
2月前
|
安全 Java 开发者
Java并发编程中的线程安全问题及解决方案探讨
在Java编程中,特别是在并发编程领域,线程安全问题是开发过程中常见且关键的挑战。本文将深入探讨Java中的线程安全性,分析常见的线程安全问题,并介绍相应的解决方案,帮助开发者更好地理解和应对并发环境下的挑战。【7月更文挑战第3天】