学习笔记 6月3日(周四):内容7 线程
Posted 进步一丢点everyday
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记 6月3日(周四):内容7 线程相关的知识,希望对你有一定的参考价值。
进程与线程
- 进程属于操作系统的,进程和线程都是由操作系统所体会程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的主要区别:
–一个程序至少由一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,是的多线程程序的并发性搞。
–进程在执行过程中拥有独立的内存单元,而多分线程共享内存,从而极大低提高了程序的运行效率。
–线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能单独执行,必须依存在应用程序中。
–从逻辑角度来看,多线程的意义在于一个应用程序中有多个执行部分可以同时执行。操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理,以及分配资源。
–线程具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
–线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程本身基本上不拥有系统资源,只拥有一点在运行时候必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。
–一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行
它们饿主要差别在于,它们是不同的操作系统资源管理方式。 - 一个具有生命的线程有哪些状态
创建、就绪、运行、阻塞、死亡
–创建:仅仅是实例化了Thread对象。还没有调用start()方法,此时isAlive()是false;
–就绪:线程有资格运行,但是调度程序还没有把他选为运行线程时候所处的状态。调用了start()方法,线程不处于运行状态,此时isAlive()是true;
–运行:从就绪状态池(注意不是队列,是池)中被选择为当前执行的线程所处的状态;
–阻塞:线程仍然是活得,只是缺少运行条件,一旦具备条件,就可转为就绪状态;
–死亡:一个线程的run()方法运行结束。那么该线程完成器使命,死亡状态。但是仍然是一个Thread对象,仍可以被引用。但是线程一旦死去,就永远不能重新启动了。 - 启动线程是start()方法开始
当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。但是这并不意味着线程就会立即运行。只有当cpu分配时间片时,这个线程获得时间片时,才开始执行run()方法。start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体(真正的逻辑)。 - 在java中每个类都有一个主线程,要执行一个程序,那么这个类当中一定要有main()方法,main()方法是java类中的主线程。自己创建线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口。一般情况下,最好避免,因为java中是单根继承的,如果继承了Threa类,则无法再继承其他类。
- Thread类实现了Runnable接口,不是抽象类。
- 线程同步
线程共享了相同的资源,但是在某些重要的情况下,一次只能让一个线程来访问共享资源。
方法:
–共享变量
–存在于同一个内存空间中的所有线程
–受控访问的同步
关键字synchronized和volatile
synchronized有以下两个重要含义(1)一次只有一个线程可以执行代码的受保护部分。(2)一个线程更改的数据对于其他线程是可见的
–确保共享数据更改的可见性
–同锁保护的原子代码块 - java线程的调度和优先级
线程调度的意义在于jvm应对运行的多个线程进行系统的协调,以避免多个线程争用有限资源而造成应用系统死机或者崩溃。
–java中定义了线程的优先级策略,分为10个等级,分别是1-10之间,数字越大表明线程的级别越高。Thread类中表示线程最低、最高和普通优先级的成员变量分别是MIN_PRIORITY、MAX_PRIORITY和NORMAL_PRIORITY分别代表1、10、5级,默认是5级。
–线程调度器会采用抢占式策略来调度线程的执行,优先级高的会被先执行,相同优先级的线程采用轮转的方式分配cpu。 - yield()方法会使得线程从运行状态转为就绪状态
- sleep()方法可以使得其他线程(比如低于它优先级的线程执行)但它并不释放对对象锁
- wait()和notify()中wait()是如果条件不满足则等待,条件满足则唤醒(唤醒使用notify()),二者都属于Object类,而不是Thread类。
以上是关于学习笔记 6月3日(周四):内容7 线程的主要内容,如果未能解决你的问题,请参考以下文章