前段时间,在做一个Python项目的时候,需要将窗口的线程和数据处理的线程分开处理,因此使用了Python的多线程管理;最近复习Java的时候再次接触到了Java的线程管理。温故知新,写下这篇关于线程的博客。

#一、综述

###什么是程序
程序是一段静态的代码,它是应用软件执行的蓝本。

###什么是进程
进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。

###什么是线程
线程是必进程更小的执行单位。一个进程在其执行过程中可以产生多个线程,形成多条执行线索,每条线索(即线程)都有它自身的产生,存在和消亡过程,也是一个动态的概念。

总的来说,静态的程序运行得到动态的进程;进程包含了多个独立运行的线程。

参考《Java面向对象程序设计(第2版)》

#二、Python中的多线程 threading
假如我们想要实现一个功能,如下:

主程序while死循环
另一个子函数subFun(n)从0到n不断计数并输出

先写出来试试

# coding:utf-8
def subFun(n):while True:for i in range(n):print("子线程:"+str(i))subFun(6)          #子程序从0到n循环并输出
while True:        #主程序whlie死循环print("主线程")

以上程序是否可行呢?
很明显,不可行!因为在subFun中有一个死循环,因此无法运行到主程序的while循环。

运行结果如图

由上可见,这两段造成了相互的干扰而无法同时运行。

因此,要使用多线程的管理避免这种干扰的发生。

在python中,threading是管理多进程的包,通过import threading语句来使用这个包。

首先要为子函数构建一个线程t1 = threading.Thread(target=subFun,args=(6,)),其中参数target是要维护的线程函数名(注意没有圆括号),args是函数的参数表。返回对该线程的引用。
然后要设置守护线程:t1.setDaemon(True)
当你需要启动该线程时,使用start方法:t1.start()

完整的程序如下

# coding:utf-8#导入线程管理包
import threading
#子线程
def subFun(n):while True:for i in range(n):print("子线程:"+str(i))
#为subFun构建线程
t1 = threading.Thread(target=subFun,args=(6,))
t1.setDaemon(True) #守护线程
t1.start() #启动线程
#主线程
while True:print("主线程")

运行结果如图:

#三、Java中的多线程Thread
在Java中,每个Java程序都有一个默认的主线程,当程序进入到main方法后,会启动这个默认的主线程,该线程负责执行main方法。而如果需要创建子线程,就需要创建一个继承于Thread的子类。

public class SubThread extends Thread{...
}

当Java虚拟机执行到该线程时,会调用Thread类中的run()方法,因此,我们要在子类中重写run()方法以规定子线程的具体使命。

public class SubThread extends Thread{public void run(){... //该线程要做的事}
}

同样于上面的功能

主程序while死循环
另一个子函数subThread(n)从0到n不断计数并输出

用Java的实现如下:

public class main {public static void main(String[] args) {  SubThread  a  = new SubThread(6);  //新建子线程对象a.start();  //启动线程 //主线程while(true) {System.out.println("主线程");}}
}
class SubThread extends Thread{int n;public SubThread(int n) {  //构造方法this.n = n;}//重写Thread类中的run()方法public void run(){while(true) {for(int i=0;i<n;++i)System.out.println("子线程:"+i); }}
}

运行结果如下:

程序、线程、进程的区别(python、Java举例)相关推荐

  1. 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)

    上一篇文章学了堆,栈以及静态存储区.它们实际上都是针对进程来说的.那么程序与进程有什么区别呢? 本文不细讲程序与进程. 1 程序与进程 1.1 什么是程序 写完的.c文件是源文件.也叫源代码. 将源代 ...

  2. linux和Windows线程进程的区别

    1.linux线程进程 linux内核中,进程是用一个task_struct的结构体描述的,也就是进程描述符,里面包含了进程id.进程的地址空间.进程打开的文件信息.挂起的信号.进程的状态等等信息. ...

  3. 程序与进程的区别,并发与并行的区别,多进程的实现原理

    目录 1. 什么是进程 2. 进程与程序的区别 3. 并发与并行 4. 同步\异步and阻塞\非阻塞(重点) 5. 进程的创建(了解) 6. 进程的终止(了解) 7. 进程的层次结构 8. 进程的状态 ...

  4. python在主线程上下文执行_线程进程系列*(Python)

    一 ,线程的两种调用方式 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更 ...

  5. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  6. 协程与线程, 进程的区别

    进程.线程.协程的区别 进程是资源分配的单位,真正执行代码的是线程,操作系统真正调度的是线程. 进程没有线程效率高,进程占用资源多,线程占用资源少,比线程更少的是协程. 协程依赖于线程.线程依赖于进程 ...

  7. 程序与进程的区别和联系

    进程是程序的一次运行活动,属于一种动态的概念. 程序是一组有序的静态指令,是一种静 态 的 概 念. 但 是, 进 程 离 开 了程 序 也 就 没 有 了 存 在 的 意 义. 因 此, 我 们 可 ...

  8. 程序与进程的区别 和 联 系

    1. 进程是程序的一次运行活动,属于一种动态的概念. 程序是一组有序的静态指令,是一种静 态 的 概 念. 但 是, 进 程 离 开 了程 序 也 就 没 有 了 存 在 的 意 义. 因 此, 我 ...

  9. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

  10. 多线程(一)程序,进程,线程的区别与联系

    程序.进程.线程的概念 程序是指令的有序集合,被存储在磁盘或其他的数据存储设备中,是一个静态概念,其本身没有任何运行的含义. 进程是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统运 ...

最新文章

  1. Android Studio——怎么设置代码补全以及提示(详细)?
  2. SpringMVC4+JPA(Hibernate4)+Spring-data-jpa+Shiro整合
  3. 23-Python3 File
  4. jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...
  5. 网易严选宣布退出双11?
  6. 多实例linux自动启动,Linux 下自动启动多个oracle实例
  7. 10 个学习iOS开发的最佳网站(转)
  8. linux以及网络协议
  9. 用DEM制作通用三维地形模型
  10. html5页面左右框架布局代码,网页布局框架(示例代码)
  11. Redis数据类型及编码
  12. Qt::WA_DeleteOnClose介绍与注意事项
  13. 理论力学知识要点归纳(三)
  14. Pyinstaller:moviepy打包报错AttributeError: module ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fadein‘
  15. uchome迁移问题
  16. 国家旅游局发布厕所大数据报告,上厕所最容易的城市你一定想不到
  17. 《众妙之门——自由网站设计师成功之道》一1.5 客户服务的重要性
  18. 机关算尽,......
  19. 阿里云服务器10M带宽实际速度能达到多少?
  20. [职场原则] 疏不间亲 (转)

热门文章

  1. [细说Java](3)创建字符串是使用quot; quot;还是构造函数?
  2. XML解析:PULL解析
  3. webpack4与babel配合使es6代码可运行于低版本浏览器
  4. nodejs学习文档(一) 认识node.js
  5. thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
  6. thinkphp模板常用的方法
  7. struts2学习之基础笔记1
  8. jQuery操作radio、checkbox、select 集合
  9. uva 1291 - Dance Dance Revolution ( dp )
  10. 我行贿了 I Paid A Bribe! --印度IPAB中国官方网站 - 民间反腐网站“我行贿了”网址大盘点...