Java基础09——进程与线程

98 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

进程与线程概念

进程是系统中一个正在运行的程序实体进程是系统进行资源分配和调度的基本单位

线程是进程中运行的实际工作单位线程是系统进行运算调度和资源分配的最小单位

关系: 进程是线程的容器一个进程中可以并发多个线程,每条线程并行执行不同的任务;一个进程的多个线程共享进程的资源

线程基本不拥有系统资源,只有一些运行时必不可少的资源,比如程序计数器、寄存器和栈,进程则占有堆、栈。

线程的五种状态

Java中线程生命周期分为新建(New)、运行(Runnable)、阻塞(Blocked)、无限期等待(Waiting)、有限期等待(Time Waiting)和结束(Terminated)这6种状态。

线程状态方法

wait() 与 sleep()

sleepThread类的方法,会使线程阻塞让出CPU,但是不释放锁

wait()Object类的方法,会使线程阻塞让出CPU,同时会释放锁当前线程必须拥有对象的锁才可调用该方法;必须调用notify/notifyAll方法唤醒,(notify是随机唤醒)。

yield() 就绪状态

使线程暂停让出 CPU ,但不是阻塞线程,而是将线程转入就绪状态其他线程可能获得CPU,这个线程也可能获得CPU

join()

阻塞本线程等到指定线程完成以后再继续执行。

例如:在线程 B 中调用了线程 A 的 Join()方法,直到线程 A 执行完毕后,才会继续执行线程 B。

多线程的使用

创建线程的方式

继承 Tread 类、实现 Runnable 接口、实现 Callable 接口、使用线程池

Runnable和Tread比较

Tread在继承的子类中重写run()方法,使用自己对象的start()方法启动线程

多个线程分别使用各自对象的资源,资源不互通一对一执行任务

Runnable在实现类中重写run()方法,使用代理类Tread对象的start()方法启动线程

多个线程同时使用一个实现类对象的资源,资源共享一对多执行任务

Runnable 和 Callable 比较

Callable可使用call()获得返回值可以抛出异常

Runnable 没有返回值不可以抛出异常,启动的线程将独立运行并调用该对象的run()方法

简述线程通信的方式

  1. volatile 关键词修饰变量,保证所有线程对变量访问的可见性和有序性
  2. synchronized关键词。确保多个线程在同一时刻只能有一个处于方法或同步块中。
  3. wait/notify方法
  4. IO通信
  5. Lock 锁的 newContition()方法返回 Condition 对象,Condition 类也可以实现await()等待/signal()通知