A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周斌 中级黑马   /  2012-11-2 00:17  /  2262 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周斌 于 2012-11-7 12:06 编辑

    在Java中,Thread类自身不执行任何操作,它只是驱动赋予它的任务,但是线程的研究中总是不变地使用“线程执行这项或那项的动作”这样的语言。
    那么,线程是否就是任务呢?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

8 个回复

倒序浏览
在32位的Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程。

  进程就是应用程序的运行实例。每个进程都有自己私有的虚拟地址空间。每个进程都有一个主线程,但可以建立另外的线程。进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分。

  可以把线程看成是操作系统分配CPU时间的基本实体。系统不停地在各个线程之间切换,它对线程的中断是汇编语言级的。系统为每一个线程分配一个CPU时间片,某个线程只有在分配的时间片内才有对CPU的控制权。实际上,在PC机中,同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫秒左右),所以看上去好象是多个线程在同时运行。

  进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。

  虽然在进程中进行费时的工作不会导致系统的挂起,但这会导致进程本身的挂起。所以,如果进程既要进行长期的工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互。


简单的说,你每启动一个程序,就启动了一个进程。在Windows 3.x下,进程是最小运行单位。在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,也就是共用变量,线程有可能会同时操作一片内存。

所谓进程,本身不能执行,它只是一个资源的集合体,拥有地址空间,模块,内存,...
线程是真正的执行单元,一个进程如果没有线程,那么就没有存在的意义,因为不可能执行。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-2 07:12 编辑

简单的说:任务是前台运行的程序,线程是前台运行的程序服务,和后台系统自身的服务以及木马病毒等隐藏前台后潜伏的地方。
线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.
线程的周期
新建 就绪 运行 阻塞 死亡
线程调度与优先级
有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度.
线程组
每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组.
守护线程
是特殊的线程,一般用于在后台为其他线程提供服务.
isDaemon():判断一个线程是否为守护线程.
set Daemon():设置一个线程为守护线程.
Thread类和Runnable接口
Thread类
类Thread在包java.lang中定义,它的构造方法如下:
public Thread();
public Thread(Rannable target);
public Thread(Rannable target,String name);
public Thread(String name);
public Thread(ThreadGroup group,Rannable target);
public Thread(ThreadGroup group, String name);
主要方法
isActive() 判断是否处于执行状态
Suspend() 暂停执行
reSume 恢复执行
start() 开始执行
Stop() 停止执行
sleep() 睡眠
run() 程序体
yield() 向其他线程退让运行权
线程优先级
Public statuc final int MAX_PRIORITY最高优先级,10
Public statuc final int MIN_PRIORITY最低优先级,1
Public statuc final int NORM_PRIORITY普通优先级,5
Runnable接口
Runnable接口中只定义了一个方法run()作为线程体,
void run()

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
线程不一定就是任务!(如果从java的角度来看)
创建线程有两种方式:
《1、继承Thread类,这个时候,要覆盖Thread中的run方法,而在run方法体中,要执行线程要进行的动作。
此时,你可以将run方法体中的那段代码当做任务来看待。
《2、实现Runnable接口,这个时候,才可以认为被实现的Runnable接口是任务。这个类就是将线程要操作的任务封装成一个对象。
更加体现了面向对象的思想。
在一个线程中,如果同时存在thread中的run方法,和Runnable接口中的run方法,此时,线程会执行Thread中的run方法。

如果还是不太明白,可以看看javaAPI中的java.util.Timer,这个类,这个调用TimerTask方法,这个TimerTask就是一个任务。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
张忠豹 发表于 2012-11-2 08:11
线程不一定就是任务!(如果从java的角度来看)
创建线程有两种方式:
《1、继承Thread类,这个时候,要覆 ...

               谢谢:P
回复 使用道具 举报
吴愿涛 发表于 2012-11-2 07:10
简单的说:任务是前台运行的程序,线程是前台运行的程序服务,和后台系统自身的服务以及木马病毒等隐藏前台 ...

               谢谢:P
回复 使用道具 举报
周斌 中级黑马 2012-11-2 17:34:22
7#
吴愿涛 发表于 2012-11-2 07:10
简单的说:任务是前台运行的程序,线程是前台运行的程序服务,和后台系统自身的服务以及木马病毒等隐藏前台 ...

               谢谢:P
回复 使用道具 举报
周斌 中级黑马 2012-11-2 17:34:37
8#
林志进 发表于 2012-11-2 00:47
在32位的Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程。

  ...

               谢谢:P
回复 使用道具 举报
线程和进程我可以理解为。我打开一个网页是一个进程。。然后同时开启网页下载任务这就是一个线程这样子么。。视频里多线程我可以理解为在以上的情况下我开启多个下载任务就是多线程。借用LZ的地方发发问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马