《java多线程编程核心技术》一

1. 线程与进程的区别?
进程是受操作系统管理的基本运行单元,线程可以理解成进程中独立运行的子任务。举个例子,qq就是一个线程,其中的视频、聊天、传输就是不同的线程。

2. 多线程的优势是啥?
使用多线程,可以在同一时间内运行多个不同的任务,最大限度的利用cpu的资源。cpu在这些任务间不停的切换,由于切换的速度非常快,给使用者的感觉就是这些任务在同时执行。举个例子,当一个任务A需要执行10s,另外一个任务B需要执行1s,如果使用单线程,则任务B必须等到任务A执行完成才能执行,而多线程则可以让A运行的同时,执行B。因此,使用多线程,也是在使用异步。

3. 实现多线程的方式
(1)继承Thread类
(2)实现Runnable接口
由于java中只支持单继承,因此,一般建议实现Runnable方法的方式。
同时Thread类也实现了Runnable接口,并且Thread类的构造函数中支持传入Runnable接口的对象,还可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交给其他的线程进行调用。
需要注意的是,在使用多线程技术时,代码的运行结果与代码的执行顺序或调用顺序是无关的。

4. 线程的启动
Thread类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。如果直接调用线程对象的run()方法,就不是异步执行了,而是同步,从而失去了多线程的特性。另外需要注意的是,执行start()方法的顺序不代表线程启动的顺序。

5. 共享变量
共享变量指的是多个线程可以访问和修改的变量,使用多个线程调用同一个线程对象时,就可以实现变量共享,同时线程的类变量,也是可以实现变量共享的。当变量共享时,就涉及到线程安全的问题。

6. 线程安全
非线程安全主要是值多个线程对同一个对象的同一个实例变量进行操作时会出现值被更改,值不同步的情况,进而影响程序的执行流程。反之则是线程安全的。

7. 多线程中的常用方法
(1)currentThread()
currentThread()可以返回代码段正在被那哪个线程调用的信息。
(2)isAlive()
isAlive()方法的功能是判断当前的线程是否处于活动状态。所谓的活动状态就是指线程已经启动且尚未终止。
(3)sleep()
sleep()方法的作用是在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),是一种静态方法。但是sleep()不会释放对象锁。
(4)getId()
getId()方法的作用是取得线程的唯一标识。
(5)yield()
yield()方法的作用是放弃当前的cpu资源,将它让给其他的任务去占用cpu的执行时间,但是很多刚刚放弃,马上又获得cpu时间片,同时,该方法会释放对象锁。

8. 如何停止一个线程?
停止一个线程意味着在在线程处理完任务之前停掉正在做的操作,也就是放弃当前的操作。stop()方法可以停止一个线程,但是是不安全的,因为一般来说,不建议使用,因为如果强制让线程停止,则有可能出现一些清理性的工作得不到完成,另外一个情况是对锁定的对象进行了“解锁”, 导致数据得不到同步的处理,出现数据不一致的问题。
大多数停止一个线程的操作使用Thread,interrupt()方法,这个方法不会终止一个正在运行的线程,还需要加入一个判断才能完成线程的停止。
那么如何判断线程是否是停止状态呢,java提供了以下两种方法:
(1)this.interrupted(): 测试当前线程是否已经中断,是静态方法, 执行后具有将状态标志清除为false的功能。
(2)this.inInterrupted(): 测试线程是否已经中断,是非静态方法, 不清楚状态标志。

9. 如何暂停一个线程?
暂停线程意味着此线程还可以恢复运行,在java中, 可以使用suspend()方法暂停线程,使用resume()方法恢复线程运行。
但是该方法存在一些问题,如果使用不当,极易造成公共的同步的同步对象的独占,使得其他线程无法访问公共同步对象。

10. 线程的优先级
在操作系统中,线程可以划分优先级,优先级较高的线程得到的cpu资源较多,也就是cpu优先执行优先级较高的线程对象中的任务。
同时,线程的优先级是具有继承性的,比如线程A启动线程B,则B线程的优先级与A是一样的。
但是,高优先级的线程总是大部分先执行完,不代表高优先级的线程全部先执行完。

11.守护线程
java多线程中有两种线程,一种是用户线程,另一种是守护(Daemon)线程。
守护线程是一种特殊的线程,它的特性有陪伴的含义,当进程中不存在非守护线程时,则守护线程自动销毁,典型的守护线程就是垃圾回收线程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值