Java-线程

Java-线程

最近准备笔试,看到有线程方面的笔试题,就总结了一下有关线程方面的知识

1.程序、进程、线程
程序:一段静态代码,应用软件的执行蓝本
进程:程序的一次动态执行,对应从代码加载,执行至完成的一整个完整过程,也是进程从产生、发展到消亡的过程
线程:比进程更小的执行单位,进程在执行过程中可以产生多个线程,形成多条执行线索,每条线索(线程)也有它自身的产生、存在和消亡的过程、也是一个动态的概念。
2.线程与进程的区别:
(1)地址空间:进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间;进程之间数据状态完全独立,线程间共享一块儿内存空间;
  (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;进程通过多个线程占据系统的资源,线程占CPU的基本单位;
  (3)线程是处理器调度的基本单位,但进程不是;
  (4)二者均可并发执行。
3.Java中的线程:
——每一个Java程序都有一个默认的主线程,当JVM加载代码发现main方法之后,就会立即启动主线程
主线程的特点: ①是产生其他子线程的线程
②不一定是最后完成执行的线程
——如果main方法中没有创建其他线程,那么当main方法执行完最后一个语句,JVM就会结束Java程序(单线程)
——如果main方法中又创建了其他的线程,那么JVM就要在主线程和其他线程之间轮流切换,JVM要等程序中所有的线程都结束之后才结束程序(多线程)
4.多线程的优势:
减轻编写的交互频繁,涉及多面的程序的困难;
程序的吞吐量会得到改善
由多个处理器的系统,可以并发运行不同的线程,否则任何时刻都只有一个线程在运行
同时执行是人的感觉,在线程之间实际上是轮换执行的
5.线程的使用场景:想要同时处理多事件(单线程处理不了,必须使用多线程);多个线程分解大任务(用单线程可以做,但使用多线程可以更快)
6.线程的生命周期:新建、就绪、运行、阻塞、死亡

新建:线程对象已经创建,还没有调用start()方法
可运行:线程调用start方法,但调度程序还没有把它选定为运行线程
运行:线程调度程序从可运行的线程池中选择一个线程作为当前线程
等待/阻塞/睡眠:线程仍是活的,但是没有条件运行,它是可运行的,当某事件出现,他可能返回到可运行状态
死亡:当线程的run方法完成即为死去,线程一旦死亡,就不能复生,一个死去的线程上调用start方法,会抛出Java.lang.illegalThreadException异常
7.Java中创建多线程
(1)继承Thread类:重写run方法–>new一个线程对象–>调用对象的start方法启动线程
(2)实现Runnable接口:实现run方法–>创建一个Runnable类的对象r,new MyRunnable–>创建Thread类的对象并将Runnable对象作为参数,newThread(r)–>调用Thread对象的start方法启动线程

(3)对比:
①继承Thread类实现多线程
1)优点:编写简单,如果需要访问当前线程直接使用this即可获得当前线程.
2)缺点:因为线程类已经继承了Thread类,不能再继承其他的父类
②实现Runnable接口
1)优点:线程类只实现了Runable接口,还可以继承其他的类. 这种方式可以多个线程共享同一个目标(target)对象,非常适合多个相同线程来处理同一份资源的情况,从而可以将代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想
2)缺点:编程稍微复杂,需要访问当前线程,必须使用Thread.currentThread()方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值