操作系统实践课程总结

本文总结了操作系统实践课程中的核心内容,重点讨论Java中的线程创建,包括通过继承Thread类和实现Runnable接口两种方式。此外,文章还深入讲解了线程同步的概念、synchronized关键字的使用,以及生产者消费者问题的解决方案,结合具体代码展示了如何利用ReentrantLock实现线程安全的队列。最后,作者强调了实践课程对于深化操作系统理解和提升编程技能的重要性。
摘要由CSDN通过智能技术生成

1 线程的创建与启动

1.1 进程与线程

1.线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。

 2. 进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

 3.Start()…… 启动线程……

4.(1)创建一个Runnable接口的对象并使用Thread对象启动它。

 (2)继承Thread对象

1.2 Java中的Thread和Runnable类

   1.一个Thread类的对象对应一个线程

   2. Thread t = new Thread(obj);

  3. Obj:Runnable的对象  Runnable的实现类是线程执行的主体

   4.(一)继承Thread类创建多线程----单线程

       (二)通过继承Thread类实现多线程:

     如果希望(一)中的两个循环打印语句都能够执行的话,那么就需要实现多线程。为此jdk提供了一个多线程类Thre  ad,通过继承Thread类,并重写Thread类中的run()方法便可以实现多线程。在Thread类中,提供了一个start()方法用于启动新线程,线程启动后,系统就会自动调用run()方法。

    (三)实现Runnable接口创建多线程

       在(二)中通过继承Thread类实现多线程,但是这种方式有一定的局限性。因为在java中只支持单继承,一个类一旦继承了某个父类就无法再继承Thread类,比如学生类Student继承了person类,就无法再继承Thread类创建的线程。为了克服这种弊端,Thread类提供了另外一种构造方法Thread(Runnable target),其中Runnable是一个接口,它只有一个run()方法。当通过Thread(Runnabletarget)构造方法创建一个线程对象时,只需该方法传递一个实现了Runnable接口的实例对象,这样创建的线程将调用实现了Runnable接口中的run()方法作为运行代码,二不需要调用Thread类中的run()方法。

1.   



1.3 三种创建线程的办法

     第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务。
     
第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务。
     
第三种方法:实现callable接口,重写call()方法,call()作为线程的执行体,具有返回值,并且可以对异常进行声明和抛出

2 线程简单同步(同步块)

   同步锁:

    1.Java5开始,Java提供了一种功能更加强大的线程同步机制——通过显式定义同步锁对象来实现同步,这里的同步锁由Lock对象充当。

     Lock 对象提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock是控制多个线程对共享资源进行访问的工具。通常, 锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应该先获得Lock对象。

    某些锁可能允许对共享资源并发访问,如ReadWriteLock(读写锁),Lock,ReadWriteLock是Java5提供的两个根接口,并为 Lock提供了ReentrantLock实现类,为ReadWriteLock提供了            ReentrantReadWriteLock实现类。在 Java8中提供了新型的StampLock类,在大多数场景下它可以替代传统的ReentrantReadWriteLock。ReentrantReadWriteLock为读写操作提供了三种锁模式:Writing,ReadingOptimistic,Reading。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值