java线程池实现多线程一了解线程和线程重用

线程的run方法和start方法

start()方法
start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。
run()方法
run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。
把需要处理的代码放到run()方法中,start()方法启动线程将自动调用run()方法,这个由java的内存机制规定的。所以我们只要继承或实现线程,然后加入自己的逻辑就可以了。

多线程

多线程并发执行真正意义上是宏观上的多线程并发执行。就是分时利用CPU,当某一个线程获得了CPU时间片,该线程就执行自己的run()方法。执行结束后,释放。其他线程开始抢占cpu时间片。

线程池
线程重用

线程池的核心是线程重用。在实际生产环境中,多线程的使用必须加以控制,线程滥用会导致很对问题。线程重用能够有效的减小线程频繁创建,减小时间消耗,便于线程管理。
线程重用就是把Thread.start()给屏蔽起来了,不重复调用start()方法,而是直接调用线程里面的run()方法。所以要重用Thread,就不能让Thread执行完一个任务后终止,所以每次Thread.run()方法结束时必须阻塞run()方法,让该方法不停地从任务队列中获取任务并执行。循环在跑的过程中不断检查我们是否有新加入的子Runnable对象,有就调一下我们的run(),其实就一个大run()把其它小run()#1,run()#2,…给串联起来了。
线程池就是通过线程重用,避免线程的频繁创建,达到对多个线程的创建和执行进行优化和管理的目的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值