1、程序:利用编程语言开发的一个工具软件,静态的,在没有启动运行之前只是磁盘中的一个普通文件。
2、进程:当一个程序进入内存就变成了进程,即进程是处于运行过程中的程序,具有一定的独立功能。
特征:独立性,动态性,并发性。
3、线程:被称为轻量级的进程,指运行过程中的调度单位,线程在程序中是独立的,并发执行的流。线程可以创建和撤销,具有就绪、阻塞和运行三种基本状态。
1、单线程:只有一条的执行走向线程,效率比较低,没有充分利用CPU。
2、多线程:多于一条的执行走向线程,共享内存,可以实现多任务。
例:访问网页时,应用服务器可以同时响应多个用户请求。
一段代码就好像是一座独木桥,任何时刻,只能有一个人在桥上走。
一张火车票只能卖给一位乘客。
4、进程与线程的区别与联系:
1、进程和线程都是一个控制流程,但是一个进程通常对应一个程序,而一个程序可以由多个不同的线程构成。
2、线程是进程中的实体,一个程序运行,至少有一个进程,一个进程里可以包含多个线程,但至少要包含一个线程。 5、为什么使用多线程?
1、进程之间不能享用内存,但线程之间可以共享内存。
2、系统创建进程需要重新分配系统资源,用多线程实现多个任务并发比进程效率高。
3、java中内置了多线程功能的支持,简化了java的多线程编程。
6、java线程的模型
1、抢占式调度模型:许多线程处于等待状态,但实际上只有一个线程在运行。该线程一直运行到它终止进入可运行状态,或另一个具有更高优先级的线程变成可运行状态。
2、java线程调度器支持不同优先级线程的抢先方式,但本身不支持相同优先级线程的时间片轮换,但是如果系统支持,java可以做到。
7、java线程优先级:java 提供了10个优先级,默认为0-9,但这些优先级需要操作系统的支持。不同操作系统上优先级并不相同,也不能很好地和java的10个优先级对应。优先级高的线程会获得较多的执行机会,但是优先级低的线程也可以先执行。
8、主线程:其他线程的运行必须要通过主线程来触发,由主线程开始,由主线程结束,可控制其他线程。
9、建立线程:
1、继承Thread类:定义Thread类的子类,并重写该类的run方法,该run方法的方法体就是代表了线程需要完成的任务;创建Thread类子类的实例;用线程对象的start方法来启动该线程。
优缺点:编写简单;但继承了Thread类,不能在继承其他类。
2、实现Runnable接口:Runnable适合多个相同程序代码的线程去处理同一资源的情况。实现Runable接口的实现类,并重写该接口的run方法;创建Runable实现类的实例,并以此实例作为Thread类的目标来创建Thread类的目标创建Thread对象,该Thread对象才是真正的线程对象。
优缺点:实现了Runnable接口,还可以继承其他类,适合多个线程来处理同一个资源的情况;编程相对复杂。
3、以匿名内部类创建:在一个方法中创建线程,当方法被调用时,线程启动。
10、如何知道线程是否已经结束
1、run方法执行完成,线程正常结束。
2、线程抛出一个未捕获的Exception或Error。
3、直接调用线程的结束方法,容易导致死锁。
isAlive方法:测试某条线程是否已经死亡,当线程处于创建,死亡两种状态时,该方法返回false
join()方法:调用这个方法的主线程,等待加入的子线程执行完成。
11、可以利用线程来完成一个小球运动的小程序,附图: