java多线程

首先说一下程序,进程与线程的概念与特点

程序Program
程序是一段静态的代码,它是应用程序执行的蓝本
进程Process
进程是指一种正在运行的程序,有自己的地址空间
进程的特点
动态性 
并发性 
独立性 

线程

进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。
线程又被称为轻量级进程(lightweight process)
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程 

线程特点
1.轻量级进程
2.独立调度的基本单位
3.可并发执行
4.共享进程资源


线程与进程的区别


线程的创建
方式1:继承Java.lang.Thread类,并覆盖run() 方法
方式2:实现Java.lang.Runnable接口,并实现run() 方法
方法run( )称为线程体。

线程的启动
新建的线程不会自动开始运行,必须通过start( )方法启动
不能直接调用run()来启动线程,这样run()将作为一个普通方法立即执行,执行完毕前其他线程无法兵法执行
Java程序启动时,会立刻创建主线程,main就是在这个线程上运行。当不再产生新线程时,程序是单线程的

两种线程创建方式的比较

继承Thread类方式的多线程
优势:编写简单
劣势:无法继承其它父类

实现Runnable接口方式的多线程
优势:可以继承其它类,多线程可共享同一个Runnable对象
劣势:编程方式稍微复杂,如果需要访问当前线程,需要调用Thread.currentThread()方法

实现Runnable接口方式要通用一些。


线程的生命周期



新生状态
用new关键字建立一个线程对象后,该线程对象就处于新生状态。
处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态


就绪状态
处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU
当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。


运行状态
在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。
如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。


阻塞状态
处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。 
在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。


死亡状态
死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有三个。一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过执行stop方法来终止一个线程[不推荐使用】,三是线程抛出未捕获的异常

线程控制方法

Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程。线程调度器按照线程的优先级决定应调度哪个线程来执行。
 线程的优先级用数字表示,范围从1到10
Thread.MIN_PRIORITY = 1
Thread.MAX_PRIORITY = 10
Thread.NORM_PRIORITY = 5
 使用下述方法获得或设置线程对象的优先级。
int getPriority();
void setPriority(int newPriority);

注意:优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。

线程同步

当多个线程访问同一个数据时,容易出现线程安全问题。需要让线程同步,保证数据安全

线程同步
当两个或两个以上线程访问同一资源时,需要某种方式来确保资源在某一时刻只被一个线程使用
线程同步的实现方案
同步代码块 
synchronized (obj){    }
同步方法 
private synchronized void makeWithdrawal(int amt) {}

同步监视器
synchronized (obj){    }中的obj称为同步监视器
同步代码块中同步监视器可以是任何对象,但是推荐使用共享资源作为同步监视器
同步方法中无需指定同步监视器,因为同步方法的同步监视器是this,也就是该对象本事

同步监视器的执行过程
第一个线程访问,锁定同步监视器,执行其中代码
第二个线程访问,发现同步监视器被锁定,无法访问
第一个线程访问完毕,解锁同步监视器
第二个线程访问,发现同步监视器未锁,锁定并访问



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值