`
qingyu11068
  • 浏览: 67725 次
文章分类
社区版块
存档分类
最新评论

Java多线程基础

阅读更多

1、线程的状态

2、创建和使用多线程

3、线程同步

4、同步合集

 

线程的状态

线程有五种状态:新建、就绪、运行、阻塞或结束java源码 springmvc mybatis SSM获取下载地址   

新建:新建一个线程,线程进入新建状态;

就绪:调用线程的start()方法启动线程后,进入就绪状态;

运行:当得到CPU时间,线程从就绪态进入运行态,如果时间片完或者调用yield()方法,运行态的线程可能进入就绪态;

阻塞:调用join()、sleep()、或者wait()方法,或者等待I/O结束,线程处于阻塞态;

完成:当线程执行完run()方法,这个线程就结束。

 

创建和使用多线程

Thread的类图

 

1、继承Thread类来创建新线程

2、实现Runnable接口,重写run()方法

PrintChar实现了Runnable接口,并使用Thread创建线程,由于Thread类实现了Runnable接口,所以可以创建这个类的一个对象,并且调用它的start方法来启动线程

3、线程池

Java提供Executor接口来执行线程池中的任务,提供ExecutorService接口来管理和控制任务。

 

线程同步

 

如果一个共享资源被多个线程同时访问,可能会遭到破坏。例如数据域被先后修改的顺序不同,则最后的值可能不确定。

竞争状态:如果两个或多个任务以一种会引起冲突的方式访问一个公共的资源,称为竞争状态

为了避免竞争状态,应该防止多个线程同时进入程序的某一特定部分,程序中的这部分称为临界区。

1、利用加锁同步

Java可以显式地采用锁和状态来同步线程。一个锁是一个Lock接口的实例,它定义了加锁和释放锁的方法。
RenntrantLock是Lock的一个实现,用于创建相互排斥的锁。可以创建特定公平策略的锁。公平策略值为1真,则确保等待时间最长的线程首先获得锁。为假,则给任意一个等待的线程。

 

2、线程协作

通过调用Lock对象的newCondition()方法而创建的对象,可以使用await(),signal()和signalAll()方法来实现线程之间的相互通信。

当线程调用await()方法时,线程就进入等待状态,等待唤醒的信号。

3、阻塞队列

可以对当前线程产生阻塞,如果一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞知道队列中有了元素,被阻塞的队列会被自动唤醒这样提供了极大的方便性。

几种阻塞队列:
1:ArrayBlockingQueue使用数组来实现阻塞队列,必须指定一个容量或者可选的公平策略来构造
2:LinkedBlockingQueue使用链表来实现阻塞队列。可以创建无边界的或者有边界。
3:PriorityBlockQueue优先队列,按照元素的优先级对元素进行排序。

ArrayBlockingQueue数据域

可以看出存储空间为一个数组,并且有用到锁。

两个重要方法的实现

 

当队列满时等待,不满则进队,此时用锁同步

队列空时等待,不空时出队。

 

阻塞队列的应用

由例子可知,生产者往队列放数,消费者从队列取数,当队列为空则等待,同步已经在队列中实现,无需使用锁和条件。

 

3、信号量

信号量指对共同资源进行访问的对象。在访问资源之前,线程必须从信号量中获取许可。在访问完资源之后,必须把许可返回给信号量。

程序创建了一个具有一个许可的信号量。当一个线程获得许可,其他线程不能访问这个资源,直到之前的线程释放该许可。

 

同步合集

 

Java合集框架中的类不是线程安全的;也就是说,如果它们同时被多个线程访问和更新,它们的内容可能被破坏,可以通过锁定合集或者同步合集来保护合集中的数据

0
0
分享到:
评论

相关推荐

    JAVA多线程基础演练DEMO

    这个"JAVA多线程基础演练DEMO"提供了一些基础示例,帮助开发者更好地理解和掌握多线程的基本概念和用法。以下将详细讲解Java多线程的相关知识点: 1. **线程的创建** - **继承Thread类**:创建一个新类,继承自`...

    头歌java多线程基础介绍.doc

    头歌java多线程基础 “头歌”是一个在线教育平台,提供包括Java在内的多种编程语言的在线学习资源和课程。Java多线程基础是学习Java编程中非常重要的一部分,它涉及到如何同时运行多个任务,以充分利用现代多核...

    Java多线程干货系列(1)Java多线程基础编程开发技术

    Java多线程是Java编程中的重要...以上内容仅涵盖了Java多线程基础编程的一部分知识点,实际开发中还需要关注更多的并发控制策略、性能优化和调试技巧。对于深入理解Java多线程,还需要学习和实践更多相关的高级特性。

    java多线程基础资料

    Java多线程是Java编程中的一个...以上只是Java多线程基础知识的一部分,深入学习还包括线程池的配置与优化、线程安全的设计模式、并发工具类的使用等。理解和掌握这些知识点对于编写高效、稳定的多线程程序至关重要。

    java多线程基础说课PPT教案.pptx

    java多线程基础说课PPT教案.pptx

    java多线程基础篇讲解

    Java多线程基础篇讲解是针对初学者设计的教程,旨在用简洁明了的语言帮助学习者更容易理解多线程的概念和应用。多线程编程在现代计算机系统中扮演着重要角色,尤其在CPU主频发展遇到瓶颈的情况下,通过超线程技术和...

    java多线程基础知识

    Java多线程基础知识 Java多线程基础知识是Java编程语言中的一项重要技术,用于提高程序的执行效率和响应速度。在这里,我们将详细介绍Java多线程基础知识的相关概念和技术。 一、程序、进程和线程 程序(Program...

    Java多线程基础-01、数组概述.rar

    本资料“Java多线程基础-01、数组概述”将带你入门Java的多线程世界,并结合数组这一基本数据结构进行讲解。 首先,我们需要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以有多个线程,它们...

    java多线程基础学习文档

    以上就是Java多线程基础学习的一些关键知识点,理解并掌握这些内容对于进行高效的多线程编程至关重要。在实际开发中,还需要根据具体需求选择合适的线程模型和同步机制,以实现高效、安全的并发程序。

    Java 多线程基础笔记

    Java 多线程基础笔记

    头歌java多线程基础-Java多线程基础详解与实战指南

    内容概要:本文详细介绍了Java多线程的基础概念和关键技术点。首先解释了线程的基本概念、线程与进程的区别及其不同状态。接着,通过三种方式创建线程(继承Thread类、实现Runnable接口、使用Callable和Future接口)...

    Java多线程基础-03、数组定义方式二、元素默认值规则.rar

    总之,Java多线程基础是高效编程的关键,而理解数组定义和元素默认值规则则是构建安全、健壮的多线程程序的基础。通过合理运用多线程技术和掌握数组的内在特性,你可以编写出更加高性能、可扩展的Java应用程序。

    Java多线程基础-02、数组定义方式一、访问、注意事项.rar

    在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在处理高并发和资源优化的场景下...通过观看"Java多线程基础-02、数组定义方式一、访问、注意事项.mp4"这个视频教程,你将能更深入地学习这些重要的知识点。

    头歌java多线程基础-day10.rar

    头歌java多线程基础-day10.rar

    头歌java多线程基础-day11.rar

    头歌java多线程基础-day11.rar

    头歌java多线程基础-day12.rar

    头歌java多线程基础-day12.rar

    java多线程基础说课学习课程.pptx

    java多线程基础说课学习课程.pptx

    java多线程基础说课学习教案.pptx

    java多线程基础说课学习教案.pptx

    java多线程基础说课PPT学习教案.pptx

    java多线程基础说课PPT学习教案.pptx

    java多线程设计

    一、Java多线程基础 1. 线程的创建:Java提供了两种创建线程的方式——继承Thread类和实现Runnable接口。继承Thread类可以直接创建一个新的线程类,而实现Runnable接口则可以将线程逻辑封装在任何类中,更利于代码...

Global site tag (gtag.js) - Google Analytics