您的位置:首页 > 编程语言 > Java开发

传智播客-多线程(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有自己的执行机制,通常是一些提高并发性能的机制,主要是计算某线程的空闲时间,然后根据计算出的数据在多个线程的代码句间跳转执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐