码迷,mamicode.com
首页 > 编程语言 > 详细

技术分享:进程和线程

时间:2018-12-12 17:41:22      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:独立   his   ons   手动   多个   rup   exce   优先级   进程和线程   

技术分享图片

  进程和线程

  一、引入

  1.进程:每个独立执行的程序

  4.多线程:在同一个进程(应用程序)中同时执行多个线程

  二、区别:

  2.线程:程序中维系运行的分支

  举例:人操作系统,吃进程,线程:睁眼、用手拿、张嘴吃

  3.多进程:在操作系统中同时运行多个程序

  线程的状态

  一、线程状态的分类

  NEW:创建一个线程,比如MyThread mt=new MyThread();

  RUNNABLE:可运行状态,比如mt.start();

  WAITING/TIMED_WAITING:不可运行状态,比如MyThread.sleep();

  BLOCKED:锁定状态,当前线程如果被解锁,还可以再次运行

  TERMINATED:终止状态,线程体执行结束

  

技术分享图片

 

  二、设置线程的优先级

  1.范围:1-10

  java自带优先级参数

  MAX_PRIORITY:10

  MIN_PRIORITY:1

  NORM_PRIORITY:5

  2.方法

  setPriority(int p)/getPriority()

  线程的同步:

  一、引入

  当一个进程有多个线程时,每个线程都会抢占资源,此时会引发一系列问题,引入同步的概念,可解决这些问题

  二、synchronized关键字

  使用:

  1.锁对象

  synchronized(obj){...}或 synchronized(this){...}

  2.锁方法:

  修饰符 synchronized 返回值类型 方法名(){....}

  死锁

  一、引入

  线程1锁住资源A 等待资源B,线程2 锁住资源B等待资源A,两个线程都在等待自己需要的资源,而这些资源被

  另外的线程锁住,这些线程你等我我等你,谁也不愿意让出资源,这样死锁就产生了

  解决:在定义锁时,也就是使用synchronized时,需要考虑当前资源被锁后,其他资源是否也同时被锁

  生产者与消费者:

  一、引入:

  生产者将产品交给店员,而消费者从店员处取走产品,店员一次只能持有固定数量的产品,

  如果生产者生产了过多的产品,店员叫生产者等一下,

  如果店中有空位放产品了再通知生产者继续生产;

  如果店中没有产品了,店员会告诉消费者等一下,

  如果店中有产品了再通知消费者来取走产品。

  容器类的线程安全:

  方法:

  List list =Collections.synchronizedList(new ArrayList());

  线程的创建和启动

  一、创建和启动的方式

  方式1:继承Thread类

  步骤:①创建一个类,继承Thread

  ②重写run方法,该手动导入

  ③使用Thread类对象调用start()方法启动

  方式2:实现Runnable接口

  步骤:①创建一个类,实现Runnable接口

  ②重写run()方法,自动提示

  ③创建一个Runnable子类对象,使用Thread构造器将该对象放入,初始化该Thread对象,调用start()方法

  二、两种方式的比较:

  三、注意:

  1.Thread类在lang包下

  2.程序启动后会创建两个线程,一个是垃圾回收器线程,一个是主线程,main()方法运行在主线程中

  3.关于run()方法

  ①它是线程体,启动一个线程,会执行该方法内的代码

  ②启动线程时使用start()方法,此线程进入RUNNABLE状态

  ③在启动线程时不用调用run()方法,因为run()方法没有实现多线程机制

  Thread类方法:

  线程的调度:

  一、调度方法:

  1.线程睡眠:Thread.sleep(long millis) throws interruptedException 方法

  使线程转到阻塞状态

  millis参数设定睡眠的时间,以毫秒为单位

  当睡眠结束后,就转为就绪(Runnable)状态

  2.线程让步:

  Thread.yield()方法

  暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程

  3.线程加入:

  join()throws InterruptedException 方法

  在当前线程中调用另一个线程的join()方法,则当前线程转入WAITING状态,

  直到另一个线程运行结束,当前线程再由阻塞转为就绪状态

  二、结束线程

  1.使用标志位,较为常用

  2.对于sleep或wait中的线程,使用interrupt()来终止线程

  

?

 

技术分享:进程和线程

标签:独立   his   ons   手动   多个   rup   exce   优先级   进程和线程   

原文地址:https://www.cnblogs.com/qfjavabd/p/10109187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!