课程总结
1.1进程与线程的介绍与差别:
进程的介绍:
进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
进程有三个状态:就绪状态、执行状态、等待状态【或称阻塞状态】;进程由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。
线程的介绍:
线程:线程是进程中的一个实体,作为系统调度和分派的基本单位。Linux下的线程看作轻量级进程。
进程的特征:
1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
2.并发性:任何进程都可以同其他进程一起并发执行。
3.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
4.异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
线程和进程的区别:
1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
5.由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
1.2 Java中的Thread和Runnable类
Java中线程的创建有两种方式:
1、 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中。
2、 通过实现Runnable接口,实例化Thread类。
Runnable 接口只有一个方法run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。
3、继承Thread实现的模式是定义多个线程,各自完成各自的任务.
4、实现Runnable实现的模式是定义多个线程,实现一个任务。
Thread类与Runnable接口的关系
public interfaceRunnable {
public abstractvoid run();
}
public classThread implements Runnable {
/* What will berun. */
private Runnabletarget;
/**
* Causes thisthread to begin execution; the Java Virtual Machine
* calls the<code>run</code> method of this thread.
*/
publicsynchronized void start() {......}
@Override
public void run(){
if (target !=null) {
target.run();
}
}
}
Thread类与Runnable接口都位于java.lang包中。从上面我们可以看出,Runnable接口中只定义了run()方法,Thread类实现了Runnable 接口并重写了run()方法。当调用Thread 类的start()方法时,实际上Java虚拟机就去调用Thread类的run()方法,而Thread 类的run()方法中最终调用的是Runnable类型对象的run()方法。
1.3三种创建线程的方法
代码一:
package T1;
/**
*javadoc 将文档嵌入到程序中
* @author Administrator
*
*/
class MyR implements Runnable{
private String msg;
public MyR(String msg)
{
this.msg=msg;
}
//线程入口
@Override
publicvoid run() {
while(true) {
try {
Thread.sleep(1000);//每隔一秒调用一次
System.out.println(msg);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
}
publicclass test_1 {
publicstaticvoid main(String[] args) {
//创建线程
Thread thread1 = new Thread(new MyR("hello"));
thread1.start();
Thread thread2 = new Thread(new MyR("66666"));
thread2.start();
}
}
代码二:
package