操作系统实践作业

本文详细介绍了操作系统中的进程与线程,包括它们的定义、特性及区别。此外,文章探讨了Java中线程的创建,通过继承Thread类和实现Runnable接口两种方式,并提供了示例代码。还讨论了线程同步的重要性,展示了synchronized关键字和同步块的使用。最后,通过生产者消费者问题的案例,阐述了多线程同步的实践应用。
摘要由CSDN通过智能技术生成

课程总结

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值