线程笔记【Thread】+面试题

1 .
进程:正在运行的程序,更消耗内存
线程:进程中,多个独立的小的执行单位

	进程中至少有一个前置/前台线程
	线程就是进程中的几个独立任务
	线程由CPU负责执行

2 .
并发:互联网应用 - 高并发
核心CPU不断切换,切换时随机的,切换就是为了给线程分配时间片资源
3 .
实现多线程:
run方法:线程任务的代码

4种方式:
1.继承Thread类,重写run方法
2.实现Runnable 接口,重写run方法
3.匿名内部类
4.线程池 

注意:尽量避免直接new线程对象

4 .
Thread相关 API

Thread.currentThread();  获得正在执行的线程对象   [是一个静态方法]
static  Thread.yield();  主动归还时间片	可以模拟CPU切换,从而发现更多可能性    [是一个静态方法]
static  Thread.sleep(long l); 睡眠 ,让**当前**线程处于阻塞状态(此时无法得到CPU时间片)  可以实现线程的交替执行   [是一个静态方法],时间结束的时候,变回Runnable状态。
如果手动打断 会抛出 InterruptedException 异常

getName();setName();获得/设置线程名
getId();setid();获得/设置线程ID
get/setPriority(1~10) ; -获得/设置线程优先级
默认5 ,范围1-10,数字越大,优先级越高,
优先级高的获得时间片的概率越大,没有决定性作用

设置守护线程: setDaemon(true)
守护线程: isDaemon() 返回一个boolean ,是否是守护线程。

前台(前置)线程 : 当所有的前置线程结束,守护线程也结束
结论: 所有的前台线程结束,意味着进程结束。
已知守护线程 : CG–垃圾回收
获得当前线程是否被打断: isInterrupt() --自己线程里面一定是 false
线程是否活跃: isAlive() --自己线程里面一定是true

在一个线程中,调用方法,执行方法的线程是同一个。

另外

join() - 让当前线程等待指定线程(调用join方法的线程)终止。让当前线程进入阻塞状态

wait() - 使用的时候必须带锁,否则会抛异常。,使用 notify()或者notifyAll()来唤醒等待的线程。
其中,notify()是随机唤醒一个等待的线程。

interrupt() - 中断线程,清楚线程的等待状态 ,并且返回一个异常InterruptedException

线程同步:资源共享,排队使用资源.
线程异步:资源共享,抢占资源.

解决线程并发问题:synchronized 同步锁
同步锁 synchronized

1.锁方法,方法结束,释放锁
             效率低,所以锁的范围越小越好。
2.锁代码块  ,要借助一个对象【线程共享的对象】注意:一个对象,只有一个锁,并且在同一时间内只能被一个线程拥有

/*/Runnable和Callable的区别

Runnable执行方法是run() , Callable是call()
实现Runnable接口的任务线程无返回值;   实现Callable接口的任务线程能返回执行结果
call方法可以抛出异常,run方法若有异常只能在内部消化。

注意
Callable接口支持返回执行结果,需要调用FutureTask.get()方法实现,
此方法会阻塞主线程直到获取结果;当不调用此方法时,主线程不会阻塞! 
如果线程出现异常,Future.get()会抛出throws InterruptedException或者ExecutionException;
如果线程已经取消,会抛出CancellationException

/*/ 什么是进程和线程?
进程 一段程序的执行的实例化,是一个实体,每一个进程都有自己的地址空间。三个状态,就绪,运行和阻塞。就绪就是等待处理器分配资源后可以立即执行,
阻塞就是条件不够的时候,需要等到条件满足时才能执行。

线程  一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用线程
所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立
调度的基本单位,由于线程比进程小,基本上不拥有系统资源,故对它的调度要付出的开销就会小很多,能更高效的
提高系统多个程序间并法执行的程度。

多线程 在一个程序中,这些独立运行的程序片段叫做“线程”,而利用它编程的概念就叫作“多线程处理”,为了同步完
成多项任务,不是为来提高运行效率,而是为来提高资源使用效率来提高系统效率。

进程和线程的主要区别于不同的操作系统资源管理的方式,进程有独立的地址空间,每当一个进程意外崩溃后,在
保护模式下不会对其他的进程产生影响,而线程只是一个进程的不同执行路径。线程有自己的堆栈和局部变量,但
线程之间没有独立的地址空间。
一个线程的死掉等于整个进程死掉,所以多进程的程序比多线程的程序健壮,但在进程切换时,耗费资源较大,效率
要低一些。

总之 一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程的并发性高。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值