`

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多线程与并发库高级应用视频教程22集

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

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

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

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

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

    JAVA基础课程讲义

    JAVA中如何实现多线程(重点!!) 168 通过继承Thread类实现多线程 168 通过Runnable接口实现多线程 169 线程状态和sleep/yield/join/stop/destroy方法 170 新生状态 170 就绪状态 170 运行状态 170 死亡状态 170 ...

    Java基础复习笔记.docx

    从基本的数据类型、控制结构、函数和对象导向编程(OOP)原则,到异常处理、多线程编程和集合框架,所有这些核心主题都得到了详细的涵盖。 清晰的总结和示例:每个主题都有清晰的总结,有助于学习者迅速回顾并巩固...

    java 编程入门思考

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    Java初学者入门教学

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    java联想(中文)

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    JAVA_Thinking in Java

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    Thinking in Java简体中文(全)

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    Thinking in Java 中文第四版+习题答案

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    14.1.2 针对用户界面的多线程 14.1.3 用主类合并线程 14.1.4 制作多个线程 14.1.5 Daemon线程 14.2 共享有限的资源 14.2.1 资源访问的错误方法 14.2.2 Java如何共享资源 14.2.3 回顾Java Beans 14.3 堵塞 14.3.1 ...

    Think in Java(中文版)chm格式

    14.1.2 针对用户界面的多线程 14.1.3 用主类合并线程 14.1.4 制作多个线程 14.1.5 Daemon线程 14.2 共享有限的资源 14.2.1 资源访问的错误方法 14.2.2 Java如何共享资源 14.2.3 回顾Java Beans 14.3 堵塞 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    Java开发技术大全 电子版

    第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写269 8.3.1利用Thread的...

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

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

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

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

    java课程设计五子棋游戏完整版(1).doc

    为了将课堂上得知识掌握得更加透 彻,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象 的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。让学生自己动 手动脑,将书本...

Global site tag (gtag.js) - Google Analytics