`

Java多线程基本概念回顾

 
阅读更多

Java多线程基本概念回顾

-------------------------------

线程又称轻量级进程,它和进程一样有独立的执行控制,由操作系统负责调度。区别在于线程没有独立的存储空间,而是和所属进程中其它的线程共享一个存储空间。

 

每条线程都有自己的工作内存,工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量的传递均需要通过主存完成。

 

Java中执行多线程:

1、继承Thread。

2、实现Runnable接口。

然后重写run方法。

 

线程的4种状态:

1、新建:线程已被创建但尚未执行。

2、可执行:可以被执行,但不一定正在执行,如果CPU分配了该线程时间片,该线程就执行。

3、阻塞:线程不会被分配CPU时间片。

4、死亡:一般在run方法执行完后,线程就会死亡。

 

线程的同步:

由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个问题。

解决方法:使用synchronized方法或synchronized块。

Java中每个类的实例对应一把锁,每个synchronized方法都必须获得实例的锁才能执行,否则所属线程阻塞。

方法一旦执行,就独占该锁,直到从该方法返回才释放锁。

Java中每个类也对应一把锁,可将类的静态成员方法声明为synchronized方法,以控制其对类静态成员变量的访问。

 

线程的阻塞:

阻塞是指暂停一个线程的执行以等待某个条件的发生。Java提供了大量的方法来支持阻塞。

1、sleep():使线程在指定时间内进入阻塞状态,不能得到CPU时间。

2、yield():使线程放弃当前时间片,但不阻塞,而是进入可运行状态。

3、join():让当前线程阻塞以等待特定线程的消亡。

4、wait()和notify()方法:

线程sleep()时不会释放占用的锁,而线程wait()会释放占用的锁。

notify()会将因调用该对象wait()而阻塞的线程中随机选择一个解除阻塞(但要等到获得锁后才真正可以执行)。

注意:

wait()和notify()方法必须在synchronized方法中调用(即必须在获得锁时调用)。

notifyAll()方法会将因调用wait()而阻塞的所有线程全部解除阻塞,而只有获得锁的那一个线程才能进入可执行状态。

 

守护线程:

是一类特殊的线程,与普通线程的区别在于它并不是程序的核心部分。

只要有一个非守护线程在运行,程序就不会终止。如果所有非守护线程都终止,程序就会终止。

守护线程用于后台为其它线程提供服务,setDeamon()方法将一个线程设置为守护线程。

 

线程池:

解决问题:为每个请求都创建一个新线程开销很大,在JVM里创建太多线程可能会导致系统过度消耗内存或者"切换过度"。

 

 

分享到:
评论

相关推荐

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

    JAVA多线程设计模式.pdf 下载

    标题和描述均指向了一个关于Java多线程设计模式的PDF文档的下载链接,这暗示了文档的主要内容将围绕Java中的多线程编程及其设计模式展开。在Java领域,多线程是一个核心概念,它允许程序执行多个任务同时进行,极大...

    Java多线程与并发库高级应用视频教程22集

    Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程范围内共享...

    Java多线程与并发库高级应用

    在深入探讨Java多线程与并发库的高级应用之前,我们首先需要回顾一下Java多线程的基础概念和技术要点。 ##### 1.1 线程的概念 在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是...

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段41讲、多线程设计模式内容回顾与总结.mp4 │ 高并发编程第二阶段42讲、ClassLoader课程大纲介绍.mp4 │ 高并发编程第二阶段43讲、类加载的过程以及类主动使用的六种情况详细介绍.mp4 │ 高...

    Java-JUC-多线程 进阶

    Java-JUC-多线程进阶resources是 Java 并发编程的高级课程,涵盖了 Java 中的并发编程概念、线程安全、锁机制、集合类、线程池、函数式接口、Stream流式计算等多个方面。 什么是JUC JUC(Java Utilities for ...

    JavaSE回顾总结(狂神说java).xmind

    javaSE回顾总结,学习笔记,查漏补缺...Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等.

    基于Java回顾之多线程同步的使用详解

    总之,Java多线程同步是一个深度和广度都很宽的领域,理解并掌握这些机制对于编写高效、稳定的并发程序至关重要。在编写多线程代码时,要时刻警惕可能出现的并发问题,如死锁、活锁、饥饿等,并使用适当的方法进行...

    用于回顾java基础知识 Java学习资

    12. **多线程**:Java内置对多线程的支持,可以同时执行多个任务,提高了程序效率。 13. **反射**:反射允许程序在运行时动态地获取类的信息,并能创建和调用类的对象。 14. **JNI(Java Native Interface)**:当...

    Java基础知识回顾共2页.pdf.zip

    标题"Java基础知识回顾共2页.pdf.zip"表明这是一个关于Java基础知识的简短总结,可能涵盖了核心概念和技术,分为两个部分进行讲解。虽然具体的文档内容未提供,但我们可以预期它将讨论以下几个关键领域: 1. **Java...

    基于Java回顾之多线程详解

    在Java编程中,多线程是一个至关重要的概念,它允许程序同时执行多个任务,从而提高系统的效率和响应速度。本文将深入探讨Java中的多线程,包括线程的基本属性、创建线程的方式、线程状态的转换以及线程间的通信。 ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段41讲、多线程设计模式内容回顾与总结.mp4 │ 高并发编程第二阶段42讲、ClassLoader课程大纲介绍.mp4 │ 高并发编程第二阶段43讲、类加载的过程以及类主动使用的六种情况详细介绍.mp4 │ 高...

    讲Java回顾及开发环境建立.ppt

    此外,深入理解异常处理、集合框架、I/O流、多线程、网络编程等核心概念也是必不可少的。对于JavaScript,虽然与Java名字相似,但两者是完全不同的语言,JavaScript主要用于前端网页交互,而Java则更偏向于后端服务...

    java开发实战经典习题答案

    - Java多线程编程的基础知识,如创建线程的方式(继承Thread类或实现Runnable接口)、同步机制(synchronized、volatile关键字)。 8. 常用类库 - Java标准库中提供的常用类,例如集合框架(Collection Framework...

    我一年Java之路的回顾,反思以及展望

    2. **不要被技术名词困扰**:初学者往往会被众多的技术名词搞得晕头转向,例如分布式、多线程、垃圾回收等。作者建议,这些概念随着学习的深入自然会理解,不必一开始就试图全部掌握。初学者应该专注于基础,逐步...

    JAVA学习课件PPT版

    这份"JAVA学习课件PPT版"包含的内容对于初学者来说是一份极好的资源,它涵盖了Java语言的基础、数据库连接以及多线程等核心概念。 1. **Java基础语言**:这部分内容通常会讲解Java的基本语法,如变量、数据类型、...

    java并发实战编程 英文版

    《Java并发实战编程》是一本深入探讨Java多线程编程技术的专业书籍,旨在帮助开发者理解和掌握并发编程的核心概念和最佳实践。并发编程是现代软件开发中的关键领域,尤其是在多核处理器普及的今天,利用线程并行执行...

    java面试常见问题回顾

    5. **多线程**:Java中的并发编程是重要的面试话题,包括线程的创建方式(实现Runnable接口或继承Thread类)、同步机制(synchronized关键字、Lock接口)、并发工具类(如Semaphore、CountDownLatch、CyclicBarrier...

Global site tag (gtag.js) - Google Analytics