线程--认识多线程

一,本章目标

①了解进程与线程的区别

②掌握java线程的两种实现方式及其区别

③了解线程的操作状态




二,具体内容

2.1进程与线程

DOS系统有一个非常明显的特点,只要一中病毒之后就会立即死机,因为传统的DOS系统是采用单进程的处理方式,所以只能有一个程序独自运行。

Windows系统中,即使出现了病毒,系统也看可以正常使用,因为在windows中采用的是多进程的处理方式,那么在同一个时间段上会有多个程序可以同时运行。


一个进程可以包含多个线程,进程消失了线程也会消失,线程消失了进程不一定消失,而且,所有的线程都是在进程的基础之上同时运行的。



如果现在同时运行多个任务,则系统资源时共享 的,被所有线程共用,但是程序的处理需要抢占CPU(传统单核CPU),但是现在有多核CPU,那么电脑上可以存在多个CPU。


2.2 Java多线程的实现

如果想要实现多线程,可以采用以下两种方式。

①继续Thread类

②实现Runnable接口


2.2.1   继承Thread类


一个简单的多线程例子:


代码结果如下:


以上的程序是执行完A之后再执行B,并没有达到并发执行的效果,为什么呢?

因为以上的程序实际上还是按照古老的形式调用的,通过对象.方法,但是如果想要启动一个线程必须使用Thread类中定义的strat方法。

一旦调用strat方法,实际上最终调用的是run方法。

修改代码如下:


结果:一时A执行,一时B执行



为什么不直接调用run方法,而且调用strat方法?

strat方法有可能抛出异常,strat方法中有native关键字,次关键字表示java可以调用本机的系统函数。

如果想要实现多线程,则肯定需要操作系统的支持,因为多线程操作中牵扯到一个抢占CPU的情况,需要等待CPU进行调度,那么这一点肯定需要操作系统的底层支持,

所以使用了native关键字调用本机的系统函数。而且在各个系统中,实现多线程的实现底层代码是不同的,所以使用native关键字也可以让JVM自动刁征。

2.2.2  Runnable接口


如果想要启动线程则肯定依靠Thread类,但是之前如果直接继承了Thread类,则可以将strat方法直接继承下来并使用,但是在runnable接口中并没有此方法。

Thread类的构造:public Thread(Runnable taget)

 就利用以上的方法启动多线程。代码例子如下:



最好使用Runnable接口,因为接口可以多继承。




2.3Thread类与Runnable接口


2.3.1两者之间的联系

Thread类实现了所有的Runnable接口,所以说Thread类是Runnable接口的子类。


从类的关系上来看,之前的做法非常类似与代理设计模式,Thread类完成比线程主体更多的操作,分配CPU资源,判断线程是否启动。



2.3.2  区别

使用Thread类操作多线程的时候 无法达到资源共享的目的,而Runnable则可以实现资源共享的目的。一个例子如下:



这个时候可以买票,但是3个人不是卖共同的5张票,而且每个人都有自己的5张票,不能实现资源的共享。因为每一个对象中都包含自己的ticket属性。

如果现在使用Runnable接口呢?代码如下:


虽然启动了三个线程,但是只卖了5张票。




2.3.3   使用的结论

1.实现Runnable接口比继承Thread类有如下的有点:

适合多个相同的程序代码的线程去处理同一个资源

可以避免由于但继承局限所带来的影响

增强程序的健壮性,代码能被多个线程共享,代码与数据是独立的

综上所述,使用runnable接口是最合适的。



2.4   线程状态

①创建状态:准备好了一个多线程对象  Thread t  = new Thread();

②就绪状态:调用了strat方法,等待CPU进行调度

③运行状态:执行run方法

④阻塞状态:暂时停止执行,可以将资源交给其他线程使用


实际上,线程调用strat方法的时候并不是马上执行的,还要等待CPU进行调度。





三,总结

进程与线程的区别:

线程是在进程的基础之上划分的

线程消失矜持不一定会消失,进程消失了线程就会消失


两种进程实现的方法:

继承Thread类

实现Runnable接口



线程的启动:调用strat方法,需要进行CPU调度,调用strat方法实际上就是调用run方法


Thread类是Runnable的子类,使用了代理机制


在使用多线程的实现中建议使用Runnable接口实现,这样可以避免由于单继承所带来的局限,而且使用Runnablke接口可以达到资源共享的目的


线程的状态问题




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值