• java进程和线程


    一、进程和线程的区别

    1,进程和线程都有三种基本状态:就绪,运行,阻塞

    2,从资源的角度讲:进程是拥有资源的基本单位,线程可以共享其隶属进程的系统资源。

    3,从调度的角度讲:线程是cpu调度的基本单位。

    4,从系统开销的角度讲:进程由程序、数据、进程控制块三部分组成。每次创建进程,系统都要为之分配或回收资源,如内存、io等。

    线程由线程ID、当前指令指针、寄存器集合和堆栈等组成,线程切换只需要保存和设置少量寄存器变量,因此系统开销小。

    5,从通信方面:进程通信需要依靠操作系统,而线程可以直接读写进程数据段(全局变量)来进行通信。

    进程通信可以采用的方法有:管道、信号、信号量、消息队列、共享内存、状态变量、套接字(socket)<不同机器之间>

    线程通信貌似也有类似的一些东西

    二、java中多线程的实现方式

    1,线程创建

    1.1继承Thread

    1)定义Thread的子类,实现run()方法

    2)创建Thread子类的对象  [创建之后,线程处于新建状态]

    3)调用线程对象的start方法  [线程处于就绪状态]

    1.2实现runnable或者callable

    1)定义类,实现runnable接口,重写run方法

    2)创建上述类类的对象  [创建之后,线程处于新建状态]

    3)不直接调用上述对象的start方法,而是将其作为target。new Thread(对象).start()  [线程处于就绪状态]

     

    2,控制线程的相关方法

    1)join 让一个线程等待另一个线程完成。调用后,当前线程阻塞,直到被调用的线程执行结束。

    2)sleep让线程休眠,由运行态进入阻塞态。

    3)yield让线程重新调度,有运行态进入就绪态。

     

    3,线程同步

    1)同步代码块,利用Synhronized(obj){}修饰一段代码

    2)同步方法,将方法使用Synhronized修饰

    3)同步锁Lock,和同步方法比较类似,只是同步锁显示使用Lock对象作为同步锁

    4,线程通信

    1)全局变量

    2)使用Object类的三个方法:该方法有同步监视器对象调用

    wait:导致当前进程等待

    notify:唤醒在该同步监视器上等待的进程(随机选一)

    notifyAll:唤醒在该同步监视器上等待的所有进程

  • 相关阅读:
    委托学习小记(1)
    C# 对XML的 创建、查询
    C#多线程学习(六) 互斥对象
    C#多线程学习(二) 如何操纵一个线程
    C#多线程学习(四) 多线程的自动管理(线程池)
    16/11/22_plsql
    写日志
    内存检测
    开源
    vs2005 远程调试。
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3901295.html
Copyright © 2020-2023  润新知