一、基本概念
1.进程:一段程序的执行过程(系统唯一分配的单位,也是基本的执行单位)
1.1动态性
1.2独立性
1.3并发性
概念:在同一时刻CPU交替运行多个任务,不同的代码,交替的执行(与并行区别–并行:同一时刻:CPU同时运行多个任务)
2.线程:运行在进程里的多个任务,一个任务一个线程,多个任务多个线程
3.进程和线程区别:
进程分配任务,线程执行任务
1)简而言之,一个程序至少有一个进程,一个进程至少有一个线程
2)线程的划分尺度小干进程,使得多线程程序的并发性高。
3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
.4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入几,顺序执行序列和程序的出n,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
.5)从逻角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,这就是进程和线程的重要区别。
二、实现方式
1.继承Thread (不被推荐)
(1)重写run方法,里面的代码在线程被CPU选中后,需要执行 (2)主方程Thread t =new FiretTask t.start( );(让线程开启)
2.实现Runnable 接口(较为推荐)
(1)类实现Runnable接口 (2)run方法,里面的代码在线程被CPU选中后,需要执行 (3)Runnable st=new 代理对象 ,将真实对象的引用,赋给代理对象 , new Thread( st).start();
3.实现callable接口,来自于JDK1.5之后,将改为Integer,利用future调用方法。将子线程执行完后才执行主程序
(1)创建一个线程池
(2)制定一个任务
(3)将任务交给线程池,由线程池选择调用
三、线程的管理
1.更改优先级:Priority(默认5,最低一。最高十,为线程被CPU选中概率)
2.返回线程名称 getName
3.Thread类的sleep()将某一根线程状态变成“休眠”状态
4.yield暂停
5.join 线程一旦定义,默认为线程的异步调用,但是一旦在某一个线程中对例外的线程执行join(),将会使线程的异步调用,转换为同步调用。调用线程将会处于“等待”状态,直到被调用的线程,代码执行完毕之后调用线程才继续执行,如果join(10)方法中,传入参数,参数代码同步时间,超过这个时间之后,同步将重新转换为异步 .但是如果参数是0,代表调用线程,将会无限期等待被调用线程的执行,直到被调用线程执行完毕。0=不写
6.interrupt 中断线程
7.线程同步,synchronized(),括号只能放对象