关闭

线程的概念

288人阅读 评论(0) 收藏 举报

DOS是单进程的操作系统
windows、linux、MAC操作系统是多进程和多线程的操作系统

 

java线程是通过java.lang.Thread类来实现的
1、new Thread的子类对象就能产生一个新线程
2、定义线程类实现Runnable接口

 

并发性(concurrency)和并行性(parallel)是两个概念:

1、并行指在同一时刻,有多条指令在多个处理器上同时执行;

2、并发指在同一时刻只能有一条指令执行,但是多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

 

一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

 

操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。

 

多线程编程有如下优点:

1、进程之间不能共享内存,但是线程之间共享内存非常容易

2、系统创建进程时需要为该进程重新分配系统资源,但是创建线程则代价小得多,因此使用多线程来实现多任务并发比多进程的效率高

3、java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了java多线程编程。

 

使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量

 

采用Runnable接口的方式创建的多个线程可以共享线程类的实例属性。因为在这种方式下,程序所创建的Runnable对象只是线程的target,而多个线程可以共享同一个target,所以多个线程可以共享同一个线程类(实际上应该是线程的target类)的实例属性。

 

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建、就绪、运行、阻塞、死亡5种状态。

 

由于cpu需要在多条线程之间切换,所以线程的状态也会多次在运行、阻塞之间切换。

 

当程序使用new关键字创建了一个线程以后,该线程就处于新建状态,此时它和其他的java对象一样,仅仅由java虚拟机为其分配内存,并初始化其成员变量的值。当线程对象调用了start()方法之后,该线程处于就绪状态,java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态的线程并没有开始运行,只是表示该线程可以运行了。至于该线程何时开始运行,取决于JVM里线程调度器的调度

 

线程从阻塞状态只能进入就绪状态,无法直接进入运行状态而就绪和运行状态之间的转换通常不受程序控制,而是由系统线程调度所决定,当处于就绪状态的线程获得处理器资源时该线程进入运行状态;当处于运行状态的线程失去处理器资源时,该线程进入就绪状态。但一个方法例外,调用yield()方法可以让运行状态的线程转入就绪状态

 

 

当主线程结束时,其他线程不受任何影响,并不会随之结束,一旦子线程启动起来后,它就拥有和主线程相同的地位,它不会受主线程的影响。

 

不要试图对一个已经死亡的线程调用start()方法使它重新启动,死亡就是死亡,该线程将不可再次作为线程执行。

线程会以如下三种方式结束,结束后就处于死亡状态:

1、run()或者call()方法执行完成,线程正常结束

2、线程抛出一个未捕获的Exception或Error

3、直接调用线程的stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用。 

 

 

  • 大小: 54.7 KB
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:330140次
    • 积分:8947
    • 等级:
    • 排名:第2254名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论