`

多线程-实现方式-线程控制-线程同步

阅读更多

1.程序,进程,线程

程序:是静态,一些文件的集合,可运行。

进程:当一个程序启动时就启动了一个进程。

线程:程序的不同的执行路径,主函数的执行就是主线程,其实都是线程的执行。

线程的执行是CPU的调度机制。

2.线程的创建和启动
 class A extends Thread{
  public void run(){
  
  }
 }
 
 A a = new A();
 a.start();//将线程放入可执行的队列中,等待系统调度执行
 
 -------------------------------------------------
 class B implements Runnable{
  public void run(){
  
  }
 }
 
 B b = new B();
 Thread t = new Thread(b);
 t.start();


 -------------------------------------------------
 class C extends TimerTask{
  public void run(){
  
  }
 }
 
 
 C c = new C();
 Timer t = new Timer();
 t.schedule(c, 1000, 2000);
 
3.线程的通信
 监视线程--用于监视其他线程的状态。
 生产/消费  wait/notify机制

wait让访问该对象的线程等待,只有当该对象再调用notify的时候等待的线程才会重新进入就绪状态
 
 
4.线程的同步
 一。同步和异步

 线程本身的异步的(并行)
 在某些地方需要让线程同步

 如何实现线程同步???
 1. 锁住某个代码块
  synchronized (需要同步的对象) {
   // 需要同步的代码
  }


 2. 锁住某个方法
  public synchronized void quqian(int n) {
 
  }

 3.使用锁对象
  //创建锁
  Lock l = new ReentrantLock();
 
  //上锁
  l.lock();
  //需要同步的代码块
 
  //解锁
  l.unlock();
 二、 生产者和消费者模型
 1、容器,在往容器添加的时候不能往外拿,在往外拿的时候不能往里添加,也就是同步。
 2、可以直接利用LinkedBlockingDeque
 put()方法
 //放入元素,如果容量不够,就等待
 take()方法
 // 从队列中移除元素,如果队列中没有元素,则等待
 

5.线程的暂停,停止模型
 线程暂停:
  sleep(1000)  // 睡着了也是抱着锁
  wait();      //释放锁,需要被唤醒
  
 线程的停止:
  必须是run方法自然结束
 

 多线程游戏需要暂停
 run(){
  while(是否停止){
   if(是否暂停){
    //逻辑代码
   }
  }
 }
 
6.线程的状态
 New Thread(新建状态):当线程对象被创建的时候
 Runnable(就绪,可执行):当调用完线程的start方法之后
 Running(运行时状态):线程正在执行run方法
 Not Runnable(非运行状态,阻塞状态,暂停状态,挂起状态):当线程sleep,wait的时候
 Dead(死亡状态,终止状态):线程的run方法执行完毕
 
 

分享到:
评论

相关推荐

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...

    java多线程同步问题

    多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!

    Java多线程-同步机制解决线程安全问题方式二:同步方法

    在Java多线程编程中,线程安全问题通常是指多个线程访问共享资源时可能出现的不一致或错误状态。...但是,过度使用同步可能会导致性能下降,因此在设计多线程程序时,需要根据具体需求和性能考虑来选择合适的同步策略。

    Java多线程-同步机制解决线程安全问题方式一:同步代码块

    Java多线程编程中,线程安全问题是常见的挑战,特别是在并发环境下,多个线程可能会同时访问和修改同一份共享资源,导致数据不一致。为了解决这个问题,Java提供了同步机制,其中一种常用的方式就是同步代码块...

    JAVA线程高级-线程按序交替执行

    然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程中被称为线程同步或线程协调。Java提供了一些高级特性来实现这样的需求,比如`Thread`类、`synchronized`关键字...

    linux上实现多进程和多线程实现同步互斥(源代码)

    在Linux操作系统中,多进程和多线程是两种并发执行的方式,它们在处理并发问题时,经常需要进行同步和互斥操作,以确保数据的一致性和程序的正确性。本篇将详细介绍这两种并发模型以及如何在Linux环境中实现同步互斥...

    Java多线程-线程的安全问题与线程的同步机制介绍

    Java多线程-线程的安全问题与线程的同步机制介绍 在 Java 多线程编程中,线程安全问题是非常重要的一个话题。当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读...

    多线程-VB.net开发实例_vb.net多线程_

    5. **线程同步**:虽然多线程提高了执行效率,但也会带来数据竞争和同步问题。如果这些输出方法访问了共享资源,可能需要使用`Monitor`, `Mutex`, `Lock`等同步机制来确保线程安全,防止数据不一致。 6. **项目文件...

    大恒-双相机开发-C#-多线程-项目开源

    本项目"大恒-双相机开发-C#-多线程"正是这样的一个实例,它利用C#语言进行编程,实现了对两台大恒相机的同时控制和数据采集,同时运用了多线程技术,极大地提高了系统的响应速度和处理能力。下面我们将详细探讨该...

    Linux编程手册-多线程-详细资料.rar

    总之,Linux的多线程编程是一个广阔而深入的领域,涉及到操作系统内核、并发控制和资源管理等多个方面。这份详尽的资料将引领你逐步走进这个复杂但精彩的世界,提升你的编程技能,为你的职业生涯添加一份宝贵的财富...

    操作系统-创建多线程-读者写者

    ### 操作系统中的多线程创建与读者写者问题解析 #### 多线程概念介绍 在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,而每个...

    MultiThread(VS2013 MFC多线程-含源码-含个人逐步实现文档)

    在"个人实践版本-(含源代码)VS2013-MFC多线程控制进度条.doc"文档中,很可能是介绍如何在多线程环境中更新GUI元素,如进度条。在MFC中,由于UI更新必须在主线程中进行,你需要使用消息队列或者同步对象来确保非主线...

    C#内存释放-线程控制-线程启动-线程暂停

    在C#编程中,线程控制和内存管理是两个至关重要的概念,特别是在处理并发和优化应用程序性能时。...在实践中,应始终注意线程同步和内存管理的最佳实践,以避免可能出现的问题,如死锁、竞态条件和内存泄漏。

    秒杀多线程-MoreWindows

    多线程是操作系统中能够进行运算调度的最小单位,它被包含...总而言之,熟练掌握多线程同步互斥的原理和实现方式,了解常见多线程面试题目,对于准备技术面试、提升编程技能以及解决实际开发中的问题都具有重要的意义。

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    在Java中,`join()`、`daemon`线程以及同步机制是多线程编程中的重要概念,对于理解和编写高效的并发代码至关重要。 首先,我们来讨论`join()`方法。在多线程环境中,有时候我们需要确保一个线程在执行完它的任务后...

    Java多线程-多线程知识点总结和企业真题

    ##### (2)创建多线程的基本方式 1. **继承Thread类**: - **步骤**: 1. 创建一个继承自`Thread`类的子类。 2. 重写`Thread`类中的`run()`方法,将线程要执行的操作声明在该方法内。 3. 创建`Thread`子类的...

    vc多线程-mfc-大家可以看看

    MFC中的`CWinThread`类是实现多线程的关键,它是所有线程类的基类,提供了一些基本的线程管理和同步操作。创建线程通常需要派生自`CWinThread`并重写其成员函数,比如`ExitInstance()`和`Run()`。 ### 第二部分:...

    彻底明白Java的多线程-线程间的通信.doc

    为了实现真正的并发,我们需要使用更复杂的同步机制,如线程同步或线程间通信。 接着,我们来看如何在Java中实现多线程。有两种主要方式:继承`Thread`类和实现`Runnable`接口。 1. **继承Thread类**: 当一个类...

    Delphi多线程同步的例子

    在编程领域,多线程是实现并发执行任务的重要方式,特别是在 Delphi 这样的面向对象的编程环境中。本文将深入探讨Delphi中的多线程和线程同步,并以"SortThreads"和"delphi-thread-gui"这两个示例项目为例,讲解如何...

    在Qt(C++)中使用QThread实现多线程 - 星夜之夏 - 博客园1

    综上所述,Qt中的QThread提供了灵活且安全的方式来管理和执行多线程任务,通过信号槽机制实现线程间的通信,确保了在执行长时间任务时,用户界面仍然保持响应性。理解并熟练运用这些知识点,对于构建高效、稳定的多...

Global site tag (gtag.js) - Google Analytics