多线程的基本概念及实现方式

程序
程序是一个静态的概念


进程
进程是一个动态的概念,程序在内存中的一次运行叫做进程,进程是以程序为蓝本运行,有独立的地址空间。进程是资源分配的基本单位


线程
线程在进程之中,多个线程共享同一个进程的资源。具有自己独立的执行流。


多进程并发
按照时间片的轮转来占用CPU


并行
同时执行


乐谱->程序
音乐会(一次演奏)->进程
某个演奏家->线程


在JAVA中实现多线程有两种方式
1、继承Thread
Thread(String name) 分配新的 Thread 对象。
Thread(Runnable target) 
Thread常用方法
long getId() 返回该线程的标识符。 
String getName() 返回该线程的名称。 
int getPriority() 返回线程的优先级。 
boolean isAlive() 测试线程是否处于活动状态。 
void join() 等待该线程终止。 
void run() 
static void sleep(long millis)  
void start()  
static void yield()  


通过继承Thread来实现多线程:
1)继承Thread
2)重写run方法
3)调用线程对象的start方法
注意:
1)在写多线程的时候,不能直接调用run方法,会把run方法当做普通的方法来运行




2、实现Runnable接口
1)编写一个实现Runnable接口的类
2)通过该类的对象来构造一个Thread对象
3)绑定对象,调用Thread对象的start()方法


两种线程的实现方式比较
1、通过继承Thread,由于JAVA是单继承,那该不能继承自其它类,这样灵活性较差
2、可以共享数据


线程的生命周期
新建(当new出一个线程对象的时候,处于新建状态)
就绪(当线程调用start方法,处于就绪状态,等待分配CPU,一旦获取CPU,立马执行,时间片用完,重新转入就绪状态,等待分配CPU)
运行(当就绪的线程获取CPU后,转入运行状态)
阻塞(等待获取其它的资源等情况)
死亡(run方法执行结束,或者发生异常)


线程优先级
通过public final int getPriority()获取线程的优先级
通过public final void setPriority(int newPriority)设置线程优先级
线程的优先级分为1-10级,其中主线程是5
线程中提供了三个静态变量来表示线程优先级程度


join
当一个线程正在运行的时候,把另外一个线程join进来,需要先把join进来的线程执行完,才能让原来的线程继续执行下去


yield
在线程运行的过程中,可以让出线程,由系统重新进行调度。让出线程不等于线程被阻塞
(线程休眠是阻塞),进入就绪状态


后台线程

后台线程为其它线程进行服务,相对于前台线程,例如垃圾回收器就是一个后台线程。当前台线程运行结束,后台线程没有必要存在,运行也会到此结束

线程安全问题

因为在执行了部分代码后,另一个进程接入

使用同步代码块

synchroized(对象){

需要被同步的代码;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值