`
can_do
  • 浏览: 263575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Java中的线程

阅读更多
>>概念:
线程是一个程序内部的顺序控制流
==>一个线程代表着程序内的一个顺序控制流

>>线程和进程的比较:
每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。
线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小
      ==>对应到JVM中,就是线程有三部分:程序计数器、vmStack、NativeMethodStack,而heap和MethodAreas是所有线程共享的
多进程:在操作系统中能同时运行多个任务(程序)
多线程:在同一应用程序中有多个顺序流同时执行

>>线程的概念模型
1. 虚拟的CPU,由java.lang.Thred类封装和虚拟;
2. CPU所执行的代码,传递给Thread类对象;
3. CPU所处理的数据,传递给Thread类对象;

>>创建线程的两种方式:实现Runnable接口,继承Thread类
比较:
实现Runnable接口
可以将CPU,代码和数据分开,形成清晰的模型;
线程体run()方法所在的类还可以从其他类继承一些有用的属性和方法
有利于保持程序风格的一致性

继承Thread类
Thread子类无法再从其他类继承
编写简单,run()方法的当前对象就是线程对象,可直接操纵

【vip】当一个程序的用户线程全部结束后,即使后台线程的逻辑处理未结束,后台线程也会结束。
==>一个Java进程由用户线程和后台线程构成,当所有的用户线程都结束时,整个Java进程就会退出。


>>线程6种状态:==>体现线程的生命周期
新建=New
可运行=>Runnable
等待 =>Waiting=>线程无限等待下去,需要其他线程调用notifyAll(),
超时等待=>Time-Waiting=>线程等待指定的时间后,就恢复或者尝试获取cpu时间片
阻塞=>Blocked
终止=>Terminated
==>因此分析死锁时,要注意看三种状态:waiting、timed-waiting、blocked,
==>重点看waiting和blocked
==>调用以下方法可导致线程进入waiting状态:Object.wait() || Thread.join() || LockSupport.park() ==>都没有指定具体等待的时间

>>线程优先级:
默认为5,最小为1,最大为10,不提供优先级低的在优先级高的执行结束后执行
==>不保证严格的优先级顺序


>>线程操作方法
线程串行化
join()
线程休眠
sleep()
线程让步
yield() 时间片没用完就让步给其他线程尽早执行,当前线程进入就绪状态
线程的挂起和恢复
线程挂起-暂时停止当前运行中的线程,使之转入阻塞状态,并且不会自动恢复运行。
线程恢复-使得一个已挂起的线程恢复运行
suspend()
resume()


>>临界资源问题
并发线程有机的交替,确保共享的数据在关键的时段被专用
多个线程间共享的数据称为临界资源
在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性
每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任何一个时刻,只能有一个线程访问该对象
关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能有一个线程访问
并发运行的多个线程彼此间等待,都无法运行的状态称为线程死锁

>>线程同步通信
为避免死锁,在线程进入阻塞状态时应尽量释放其锁定的资源,以为其他的线程提供运行的机会
wait()
notify()/notifyAll()

>>线程间数据传输
使用管道流
类的同步性与线程安全
************************************************
  • 大小: 64.7 KB
  • 大小: 94 KB
分享到:
评论

相关推荐

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    java多线程进度条

    为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程经典案例

    本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口...

    Java 模拟线程并发

    Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核处理器和高并发应用中,理解并熟练掌握线程并发技术对于提升程序性能至关重要。在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable...

    java 多线程操作数据库

    由于数据库连接是一种昂贵的资源,应避免在每个线程中重复创建连接,通常采用连接池的方式进行管理。 3. **数据插入操作**:代码示例展示了如何使用预编译语句(PreparedStatement)执行数据插入操作。预编译语句...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    JAVA多线程练习题答案。

    在单项选择题中,我们可以看到各种关于 JAVA 多线程编程的基本概念和技术。例如,第 1 题考查了线程的基本概念,第 2 题考查了线程的优先级,第 3 题考查了线程的状态等。 二、填空题 在填空题中,我们可以看到更...

    java中线程的应用例子

    4. **线程状态**:Java线程有五种状态:新建、可运行、运行、阻塞和死亡。了解这些状态可以帮助开发者更好地控制和调试线程。 5. **线程优先级**:每个线程都有一个优先级,Java中从1(`MIN_PRIORITY`)到10(`MAX_...

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...

    java多线程查询数据库

    在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    java多线程处理数据库数据

    但是,直接在一个线程中频繁地进行数据库交互可能会导致性能瓶颈,特别是当处理大数据量时。因此,使用多线程可以将任务分解,让每个线程处理一部分数据,从而提高效率。 为了实现这个目标,我们可以使用`...

    java多线程实现大批量数据导入源码

    在Java编程中,多线程技术是处理大数据批量导入或导出的重要手段。它能有效提升程序执行效率,尤其在数据库操作这样的I/O密集型任务中。本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量...

    java多线程分页查询

    在Java中,可以通过继承`Thread`类或者实现`Runnable`接口来创建线程。 ##### 3. 多线程分页查询方案设计 针对数据量较大的场景,本文介绍的多线程分页查询方案主要包含以下几个步骤: - **步骤1:计算总记录数**...

Global site tag (gtag.js) - Google Analytics