`

线程相关描述

 
阅读更多
1,进程:每个进程都有独立的代码和数据空间,一个进程包含多个线程,进程是资源分配的最小单位。
   线程:同一类线程共享代码和数据空间,每个 线程有独立的运行栈和程序计数器。线程是CPU调度的最小单位。
   主线程:JVM调用程序main()所产生的线程。
   当前线程:Thread.currentThread()
   后台线程:守护线程,和用户线程的区别在于,是否等待主线程依赖于主线程的结束而结束。可以isDaemon()和setDaemon()来判断和设置
   前台线程:接受后台线程服务的线程。
2,
   线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。
   多进程是指操作系统能同时运行多个任务(程序)。
   多线程是指在同一程序中有多个顺序流在执行。
3,
  java中实现多线程
  Thread  Runable接口  Callable接口

4,锁相关
   每个对象有且只有一个锁(lock)与之相关联。
   实现同步,开销很大,甚至可能造成死锁。
   synchronized关键字取得的锁是对象(lock)。
   作用域:如果被其修饰的属性,方法,代码块都是静态的,则该类的所有实例对象关联相同的锁。否则各个实例之间的锁互不相干。
   谁拿到锁,谁就可以执行其控制的代码。
   一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁

5,常用函数
   sleep(long millis);让出CPU,线程休眠,保持锁
   join();所在主线程需要等待该线程终止后才能结束。
   yield()如有相同优先级的线程处于可运行状态,则使当前运行的线程回到可运行状态,重新调度
   setPriority():更改线程优先级,默认有1,5,10三个级别
   interrupt();给线程发送一个中断信号。
   obj.wait(),obj.notify()必须要与synchronized(obj)一起使用,wait()和notify()是针对已经获取了obj锁的线程进行操作。
      wait()是释放对象锁,同时本线程休眠,
      notify()是对对象的锁的唤醒操作,本线程正常结束后,jvm在wait()对象锁的线程中随机选取一线程,赋予其对象锁

6,在java中,每次程序运行至少启动两个线程,一个是main线程,一个是垃圾收集线程。
分享到:
评论

相关推荐

    多线程的简单描述

    ### 多线程基础知识 #### 一、多线程概念解析 多线程是指在一个程序或进程中同时运行多个线程的技术。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。每一个线程都有一个...

    详细描述了Delphi多线程编程,超级简单易懂

    4. **TThread变量**:用于访问与当前执行线程相关的对象。 #### 二、TThread类详解 `TThread`类是Delphi中实现多线程的关键组件。它提供了一系列的方法和属性,用于创建和管理线程。以下是一些重要的概念和操作: ...

    网格(Grid)、线程块(Block)和线程(Thread)的组织关系.docx

    在CUDA编程中,网格(Grid)、线程块(Block)和线程(Thread)是实现高效GPU并行计算的关键组织结构。CUDA利用这种层次化的线程模型,将复杂的计算任务分解为大量并行运行的简单任务,从而充分利用GPU的计算能力。 ...

    线程中创建子线程

    描述中提到的"创建多个线程,每个线程又创建多个子线程",这是一种典型的多级线程结构,可以构建出复杂的并发执行树。这种设计模式使得程序能并行处理更多任务,但同时也带来了线程管理和同步的挑战。 在C++中,...

    delphi7 多线程测试(40个线程)

    在描述中提到的问题是典型的多线程性能问题:当开启40个线程与单线程运行相比,整体执行时间反而变慢了。这可能源于以下几个原因: 1. **线程切换开销**:操作系统在管理多线程时需要频繁地进行上下文切换,即保存...

    易语言线程暂停与继续

    在描述中提到的“子程序1”,可能是指创建线程时指定的入口子程序。这个子程序是新线程开始执行的地方,它定义了线程的具体任务。在易语言中,子程序可以接受参数并返回结果,这样就能灵活地传递信息给线程或从线程...

    C#线程参考手册相关code

    本篇将深入探讨C#线程相关的知识,并基于描述中的“C#线程参考手册”相关代码进行讨论。 1. **线程创建与启动** 在C#中,我们可以使用`Thread`类来创建新线程。创建一个新线程的基本步骤包括实例化`Thread`对象并...

    趣谈Linux第十章:线程的数据描述

    在Linux中,TCB是`task_struct`结构的一部分,包含了与线程相关的所有信息。 3. **栈**: 每个线程都有自己独立的栈,用于存放函数调用时的局部变量和返回地址。栈的大小可以在创建线程时指定,也可以由系统默认设置...

    12.1 Qt5多线程:多线程及简单实例

    在描述中提到的`WorkThread`类是一个继承自`QThread`的自定义类。这个类可能包含以下内容: - 初始化:在构造函数中,我们可以进行一些设置,比如设置线程优先级或者连接一些信号和槽。 - `run()`方法:这是线程执行...

    Linux下的线程

    之后,通过`Pthread_create()`函数向管理线程发送创建线程的请求,管理线程检查调度策略,分配资源,初始化线程描述符,调整优先级,最终完成线程创建。新线程创建后,会被插入到活动线程的双向链表中,其优先级可以...

    易语言判断多线程是否运行结束

    本篇文章将详细探讨如何在易语言中判断多线程是否运行结束,以及相关的编程技巧。 首先,我们要理解多线程的基本概念。多线程是指在一个进程中同时存在两个或更多的执行线程,它们共享同一内存空间,但各自有独立的...

    易语言多线程传递多参数

    在描述中提到的“子程序11”和“子程序1”可能是两个用于处理线程任务的子程序。在多线程编程中,每个线程通常都有自己的执行逻辑,这些逻辑通常被封装在子程序中。子程序11可能是一个主线程的子程序,负责启动其他...

    多进程/线程编程:哲学家问题

     设置进程/线程,描述哲学家 ;  随机启动哲学家 ;  显示进程/线程执行状态;  随着线程的执行,更新显示;  编写正确的哲学家程序,设法延迟线程的执行,使之出现死锁;  编写正确的哲学家程序,保证...

    VC 线程 创建 操作 同步 终止 UI线程等各种线程例子

    下面将详细介绍标题和描述中涉及的线程相关知识点。 1. **创建线程**: - 使用`CreateThread`函数可以创建一个新的线程。这个函数需要指定线程函数的入口地址、参数、初始堆栈大小等信息。 - 也可以使用`_...

    多线程_按键精灵经典多线程操作_

    描述中提到的“可以套用于任意的其他脚本上”,意味着多线程的概念和实践不仅限于按键精灵,而是普遍适用于各种编程语言和环境。理解多线程的基本原理和实践方法,有助于开发者在各种场景下实现更高效的自动化解决...

    线程操作,可多线程

    描述中提到的“自己写的线程类”,这可能是一个自定义的基类,用于封装线程创建、管理以及同步等操作。这种做法的好处在于代码的复用性和灵活性,开发者可以根据项目需求定制线程的行为。通常,自定义线程类会包含...

    pb9多线程控件,能够真实实现多线程

    描述中提到的“原版本是pb11.5”,说明这个多线程解决方案最初是在PowerBuilder 11.5版本上开发的,后来被移植到了PB9.0。这表明可能需要对代码进行一定的调整以适应较旧的版本。"有例子"意味着提供了示例代码,帮助...

    暂停线程工具(附源码)

    描述中提到的“附带源码”,意味着我们可以深入研究这个小工具是如何实现线程暂停和恢复功能的。通常,这样的工具会包含以下关键组件: 1. **线程识别**:工具需要能够识别和选择要操作的目标线程。这可能涉及到...

    Java多线程示例之线程控制

    在描述中提到的“读写相关”的实例,可能是展示了生产者-消费者模型或者哲学家就餐问题。这些场景中,多个线程需要协调工作,避免出现竞态条件(race condition)或死锁(deadlock)。Java提供了多种同步机制,如`...

    MFC用户界面线程与工作者线程

    在描述中提到的滚动条创建,如果在UI线程中执行,可能会导致界面卡顿。因此,将滚动条的创建操作放在工作者线程中,可以确保用户界面的流畅性。 在MFC中,创建工作者线程通常涉及以下步骤: 1. 定义工作者线程类,...

Global site tag (gtag.js) - Google Analytics