线程问答1

1、线程和进程的区别?

a.	根本区别:进程作为资源分配的单位,线程调度和执行的单位
b.	开销:
	每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
	线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),
	线程切换的开销小。
c.	所处环境:
	进程:在操作系统中能同时运行多个任务(程序)
	线程: 在同一应用程序中有多个顺序流同时执行
d.	分配内存:
	进程:系统在运行的时候会为每个进程分配不同的内存区域
	线程: 除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源
e.	包含关系:
	进程:没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个线程,
	则执行过程不是一条线的,而是多条线(线程)共同完成的
	线程:是进程的一部分,所有线程又的时候被称为轻量级进程

2、什么是主线程?有什么特点?

就是main方法,在主栈中运行

3、线程创建有几种方式?

1.	Thread*
创建一个类继承Thread然后重写run方法
然后创建一个Tread对象
start();
2.	Runnable*
	a.	classA implements Runnable{}
	b.	创建一个可运行的对象
	classA a=new class();
	c.	将可运行的对象封装成一个线程对象
	Thread b=new Thread (r)
3.	Callable 

4、线程如何启动?调用start方法和直接调用run方法有什么区别

启动线程: start();
启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后就瞬间结束了,
启动线程自动调用run方法,run在栈分支的底部.
直接调用run()不能开辟新的栈空间,还是在主栈中执行的方法,是单一线程执行

5、什么是线程优先级,优先级分为几级?

线程优先级被线程调度用来判定何时每个线程允许运行。
理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。
java线程的优先级一共有十级

6、线程有几种状态?什么时候位于什么样的状态?

1.	新建:创建线程对象(new)
2.	就绪:调用start(),进入cpu队列中,具有执行权
3.	运行:cpu正在执行run()方法
4.	阻塞:放弃之前占有的CPU时间片,阻塞解除继续回到就绪状态抢夺时间片
5.	死亡:run结束

7、什么是线程同步?线程同步会造成什么结果,线程同步使用什么关键字?

线程并发控制
当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突
加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 

8、Wait和sleep的区别是什么?

sleep线程休眠状态,不会释放资源(拿着cpu休眠),休眠设置时间值
Wait当前线程被阻塞并且释放所有资源,等待其他线程唤醒
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值