一、程序与进程
1、程序:一段静态的代码。
2、进程:程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。
3、进程也称任务,支持多个进程同时执行的OS就被称为多进程OS或多任务OS。
二、进程与线程
在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。
线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。
特点:线程不能独立运行,必须依赖于进程,在进程中运行。
每个程序至少有一个线程称为主线程。
单线程:只有一条线程的进程称为单线程
多线程:有不止一个线程的进程称为多线程
三、开启多线程的优点和缺点
提高界面程序响应速度。通过使用线程,可以将需要大量时间完成的流程在后台启动单独的线程完成,提高前台界面的相应速度。
充分利用系统资源,提高效率。通过在一个程序内部同时执行多个流程,可以充分利用CPU等系统资源,从而最大限度的发挥硬件的性能。
当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。
13.2 多线程实现
一、在实现线程编程时,首先需要让一个类具备多线程的能力,继承Thread类或实现Runnable接口的类具备多线程的能力,然后创建线程对象,调用对应的启动线程方法即可实现线程编程。
在一个程序中可以实现多个线程,多线程编程指在同一个程序中启动了两个或两个以上的线程。
在实际实现线程时,Java语言提供了三种实现方式:
(1)继承Thread类
(2)实现Runnable接口
(3)使用Timer和TimerTask组合
二、继承Thread线程类实现多线程
java.lang包中提供了一个专门的线程类(Thread),在该类中封装了许多对线程进行调度和处理的方法。如果一个类继承了Thread类,则该类就具备了多线程的能力,可以多线程的方式执行。
class MyThread extends Thread{
public void run(){
//线程体
}
}
继承Thread类实现多线程。
MyThread tt1 = new MyThread ();
//启动线程
tt1.start();
try{
for(int i = 0;i < 5;i++){
//延时1秒
Thread.sleep(1000);
System.out.println("Main:" + i);
}
}catch(Exception e){}
注意:
线程的特性:随机性,系统在执行多线程程序时只保证线程是交替执行的,至于哪个线程先执行哪个线程后执行,则无法获得保证,需要书写专门的代码才可以保证执行的顺序。
对于同一个线程类,也可以启动多个线程
同一个线程不能启动两次,
当自定义线程中的run方法执行完成以后,则自定义线程自然死亡。而对于系统线程来说,只有当main方法执行结束,而且启动的其它线程都结束以后,才会结束。当系统线程执行结束以后,程序的执行才真正结束。
三、 实现Runable接口
a) 多线程对象实现java.lang.Runnable接口并且在该类中重写Runnable接口的run方法。
b) 好处:实现Runable接口的方法避免了单继承的局限性。
例1:使用实现Runable接口的方式实现多线程。
class MyThread2 implements Runable{
public void run(){} //重写Runable接口中的run()方法
}
MyThread2 mt1=new MyThread2();
Thread t1=new Thread(mt1);
t1.start();
13.3 线程的生命周期
一、线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程,这就是所谓的生命周期。一个线程在它的生命周期内有5种状态:
1、新建(new Thread)
当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
例如:Thread t1=new Thread();
2、就绪(runnable)
线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();
3、运行(running)
线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
4、死亡(dead)
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
5、堵塞(blocked)
由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
正在等待:调用wait()方法。(调用motify()方法回到就绪状态)
被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)
分享到:
相关推荐
### C#多线程概念及举例介绍 #### 一、多线程概念 在计算机科学领域,多线程是指在单个程序中可以同时运行多个不同的线程来执行不同的任务。这种方式可以更好地利用CPU资源,提高程序的执行效率。线程是操作系统...
Java多线程概念及应用详细解析.mht,I love java
本教程将深入探讨C#中的多线程概念以及STAThread特性,并提供相关的源代码示例,帮助你更好地理解和应用这一技术。 首先,我们来理解什么是多线程。在单线程程序中,任务是按顺序执行的,而多线程则允许多个任务...
多线程概念** 多线程是指在一个进程中同时执行多个独立的代码段,每个代码段称为线程。这种并行处理可以提高程序的执行效率,尤其是在处理I/O密集型或计算密集型任务时,可以显著提升用户体验。 **2. Qt5中的线程*...
本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程概念 多线程是指在一个进程中可以同时执行多个独立的代码段,每个代码...
一、多线程概念 多线程是指在一个应用程序中存在多个并行执行的线程,它们共享同一内存空间,但各自拥有独立的执行流。通过多线程,可以实现任务的并发执行,比如在用户界面更新的同时,后台进行数据处理,提升用户...
以上只是Java多线程概念题的一部分,理解并熟练运用这些概念对于编写高效、稳定的并发程序至关重要。在实际开发中,还需要考虑线程安全、死锁、活锁、饥饿等问题,并合理利用线程池(ThreadPoolExecutor)优化线程...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
1. **多线程概念**:在单核CPU中,多线程是通过时间片轮转的方式实现的,即操作系统快速切换线程的执行状态,给人一种同时运行多个任务的错觉。在多核CPU中,每个核心可以并行执行不同的线程,真正实现并发执行。多...
本文将对C++多线程编程进行详细的介绍,从多线程概念的定义到实际的编程实现。同时,文章还将对Linux和Windows平台下的多线程实现进行比较,并提供了相关的示例代码。 一、多线程概念 在现代计算机系统中,多线程...
以下是一些关键的多线程概念和技巧: - **线程优先级**:调整线程优先级可以帮助平衡系统资源,但过度依赖优先级可能导致优先级反转和死锁,应谨慎使用。 - **线程池**:使用线程池可以重用已创建的线程,减少创建...
下面将详细讲解这个主题,包括C++中的多线程概念、SOCKET基础以及如何结合两者实现数据的收发。 首先,让我们了解多线程。在单线程程序中,执行流是线性的,一次只能处理一个任务。而多线程则允许多个任务(线程)...
二、多线程概念 多线程是指在一个进程中可以同时执行多个不同的线程。每个线程都有自己的执行路径,它们共享进程的内存空间,但各自拥有独立的执行栈。在易语言中,通过创建和管理线程,可以实现并发执行任务,提高...
一、多线程概念 多线程是指在一个应用程序中同时运行多个独立的执行线程。每个线程都包含有自己的程序计数器、系统寄存器和栈,它们可以并发执行任务,从而使得程序能够同时处理多个不同的任务或同一任务的不同部分...
通过这个标题,我们可以推断文档内容会从最基础的多线程概念讲起,逐渐过渡到实际编程技巧和例子。 描述部分提到的“适合初学者学习多线程”,表明文档的编写目的是为了让那些对多线程编程一无所知的读者能够理解并...
一、多线程概念理解 1. 线程:线程是程序执行的最小单位,一个进程中可以包含多个线程,它们共享同一内存空间,但各自拥有独立的执行流。 2. 单线程与多线程:单线程程序只有一个执行流,而多线程程序则可以同时处理...
一、多线程概念 多线程是指在一个进程中创建两个或更多的执行线程,每个线程都有自己的独立运行路径。它们共享同一内存空间,包括全局变量和静态变量,但各自拥有独立的栈空间,可以并行执行不同的任务。通过多线程...
本资源"《C#多线程编程实战》完整源码"提供了丰富的实例,适用于学习和实践C#中的多线程概念。 在C#中,多线程允许应用程序同时执行多个独立的任务,提高系统利用率并优化性能。.NET框架为开发者提供了强大的支持,...
1. **多线程概念**: - 在计算机编程中,多线程是指一个程序内同时执行的多个独立流程。这使得应用程序能够并发处理不同的任务,提高资源利用率和响应速度。 - 多线程环境可以避免单一主线程阻塞,提高用户体验,...
在本文中,我们将深入探讨易语言的多线程概念、实现方式以及它在实际应用中的价值。 首先,多线程是现代编程中的一个重要概念,尤其是在处理复杂任务和提高系统效率时。它允许一个程序同时执行多个不同的任务,每个...