传智播客-多线程(1)-java里的进程和线程
2010-02-24 21:50
429 查看
对于开发人员而言,进程和线程是两个耳熟能详的概念;面试笔试遇到这类题的概率也很高。有人说工作中很少用到多线程,因为线程多的话难以掌控,能不用则不用;但是也有很多业务需求不得不用多线程实现,最常见的一个是多线程下载(当然这个涉及的不只多线程这一个技术,还有io和网络连接)。
在多任务系统中,每个独立执行的程序称为进程,也就是“正在进行的程序”。我们现在使用的操作系统一般都是多任务的,即能够同时执行多个应用程序(想想,我们是不是经常开着电脑一边听歌看小说一般聊QQ)。不过实际情况是,操作系统负责对CPU等设备的资源进行分配和管理,虽然这些设备某一时刻只能做一件事,但以非常小的时间间隔交替执行多个程序,就给人以同时执行多个程序的感觉。很多相关的书提到这个内容的时候都会提到时间片,一个意思。
线程可以说是“隶属于”进程,一个进程中可以有一个或多个线程,一个线程就是一个程序内部的一条执行线索。如果要在一个程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码,而这就是多线程。
如果我们写了一个java类,里面有个main方法,当执行这个main方法时,就等于执行了一个进程,执行时可以从“任务管理器”里看到多了一个javax.exe的进程,调用了几个main方法就执行了几个javax.exe进程。
java开发中,如果一个main方法里只有常规代码,即没有Thread这样的代码,可以认为这个main方法是一个单线程程序(虽然利用IDE,可以直接stop这个程序,如果在cmd里运行,可以关掉cmd窗口或者ctrl+C强行中止,但是main自己本身是没有办法自行stop或者close的)。即该main方法此时既是线程也是进程,可以调用Thread.currentThread().getName(),打印出的结果是“main”。
当然,有Thread这样的代码也不一定就是多线程,一定要Thread.start(),否则只是声明了一个线程对象而已,并没有开启这个线程,也就达不到多线程的效果。开启了多线程的main方法自己被称之为主线程。多线程一个最起码的优势就是在有程序进入死循环或者执行时间过长中途需要中止时,可以明确中止该程序,例如复制文件时可以取消;有必要的话还可以保存已执行的内容,例如多线程的断点续传。
多线程通常会有安全问题,尤其是多个线程需要对同一个对象执行各种操作的时候,而根源就是,在一个进程中各线程的“多段代码同时交替运行”,简单说,就是多线程里的代码句不是按我们写定的顺序依次执行的,jvm有自己的执行机制,通常是一些提高并发性能的机制,主要是计算某线程的空闲时间,然后根据计算出的数据在多个线程的代码句间跳转执行。
在多任务系统中,每个独立执行的程序称为进程,也就是“正在进行的程序”。我们现在使用的操作系统一般都是多任务的,即能够同时执行多个应用程序(想想,我们是不是经常开着电脑一边听歌看小说一般聊QQ)。不过实际情况是,操作系统负责对CPU等设备的资源进行分配和管理,虽然这些设备某一时刻只能做一件事,但以非常小的时间间隔交替执行多个程序,就给人以同时执行多个程序的感觉。很多相关的书提到这个内容的时候都会提到时间片,一个意思。
线程可以说是“隶属于”进程,一个进程中可以有一个或多个线程,一个线程就是一个程序内部的一条执行线索。如果要在一个程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码,而这就是多线程。
如果我们写了一个java类,里面有个main方法,当执行这个main方法时,就等于执行了一个进程,执行时可以从“任务管理器”里看到多了一个javax.exe的进程,调用了几个main方法就执行了几个javax.exe进程。
java开发中,如果一个main方法里只有常规代码,即没有Thread这样的代码,可以认为这个main方法是一个单线程程序(虽然利用IDE,可以直接stop这个程序,如果在cmd里运行,可以关掉cmd窗口或者ctrl+C强行中止,但是main自己本身是没有办法自行stop或者close的)。即该main方法此时既是线程也是进程,可以调用Thread.currentThread().getName(),打印出的结果是“main”。
当然,有Thread这样的代码也不一定就是多线程,一定要Thread.start(),否则只是声明了一个线程对象而已,并没有开启这个线程,也就达不到多线程的效果。开启了多线程的main方法自己被称之为主线程。多线程一个最起码的优势就是在有程序进入死循环或者执行时间过长中途需要中止时,可以明确中止该程序,例如复制文件时可以取消;有必要的话还可以保存已执行的内容,例如多线程的断点续传。
多线程通常会有安全问题,尤其是多个线程需要对同一个对象执行各种操作的时候,而根源就是,在一个进程中各线程的“多段代码同时交替运行”,简单说,就是多线程里的代码句不是按我们写定的顺序依次执行的,jvm有自己的执行机制,通常是一些提高并发性能的机制,主要是计算某线程的空闲时间,然后根据计算出的数据在多个线程的代码句间跳转执行。
相关文章推荐
- Java多线程1:进程与线程概述
- 进程与线程(Java多线程总结一)
- Java多线程之进程和线程
- Java多线程(一)进程和线程的基础知识
- [疯狂Java]多线程:进程和线程的概念
- Java程序、进程和线程-Java对多线程的支持-Java线程的同步--2011年09月05日
- Java并发01:进程、线程、并发、并行、多线程、线程安全、死锁、并发优缺点
- java学习5---Java 的多线程,程序、进程和线程的概念
- java进程/线程;堆和栈;多线程
- Java多线程基础:进程和线程之由来
- Java 多线程编程之一 进程与线程,并发和并行的区别:吃馒头的比喻
- 1、Java多线程基础:进程和线程之由来
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- 进程与线程,java多线程的应用
- Java多线程基础:进程和线程之由来
- java基础之多线程、进程、主线程
- Java 多线程编程之一 进程与线程,并发和并行的区别
- 线程进程Java多线程(一)、理解进程与多线程的概念及关系
- 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解
- Java(线程的概念)(线程和进程的比较)(多线程的优点)