博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程
阅读量:4341 次
发布时间:2019-06-07

本文共 1480 字,大约阅读时间需要 4 分钟。

1、线程:

  1.1、进程:在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是“正在进行的程序”。

      在计算机中,所有的应用程序都是由CPU执行的,对于一个CPU而言,在某个时间点只能运行一个程序,也就是说只能执行一个进程。操作系统会为每个进程分配一段有限的CPU使用时间,CPU在这段时间中执行某个进程,然后会在下一段时间内切换到另一个进程中去执行。

  1.2、线程:每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行,这些执行单元可以看作程序执行的一条条线索,被称为线程。操作系统中的每一个进程中都至少存在一个线程。当一个java程序启动时,就会产生一个进程,该进程会默认创建一个线程,在这个线程上会运行main()方法中的代码。

      代码按照调用顺序依次往下执行,没有出现两段程序代码交替运行的效果,这样的程序别称为单线程程序。如果希望程序中实现多段程序代码交替运行的效果,则需要创建多个线程,即多线程程序。多个线程程序在运行时,每个线程之间都是独立的,他们可以并发执行(由CPU轮流执行)。

 

2、多线程实现

  2.1 继承Thread类创建多线程

      ---继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法上实现运行在线程上的代码

  2.2、实现Runable接口创建多线程

    ---由于java只能支持单继承,一个类如果继承了某个父类,就无法再继承Thread类,创建线程。因此,Thread类提供另一种构造方法Thread(Runable target),其中Runable是一个接口,只有一个run()方法。

3、线程的声明周期及状态转换

  ----当Thread对象创建完成是,线程的生命周期就开始了。当run()方法中代码正常执行完毕或者线程抛出一个未捕获的异常或错误时,线程的生命周期便会结束。

  线程的声明周期分为5部分:新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Terminated),线程的不同状态表明了线程当前正在进行的活动。

4、线程的调度

  1)线程休眠(sleep(long millis)):该方法可以让当前正在执行的线程暂停一段时间,进入休眠等待状态。

  2)线程让步(yield()):该方法不会阻塞该线程,只是将线程转换成就绪状态,让系统的调度器重新调度一次。当某线程调用该方法之后,只有与当前线程优先级相同或更高的线程才能获得执行机会。

  3)线程插队(join()):当某线程调用其他线程的join()方法时,线程的调用将被阻塞,直到被join()方法加入的线程执行完成后它才会继续进行。

5、多线程同步

  -----限制某个资源在同一时刻只能被一个线程访问。

  同步代码块:synchronize(lock){

         //操作共享资源代码块 

        }    

   注意:同步代码块中的锁对象可以是任意类型的对象,但多个线程共享的锁对象必须是唯一的。

  同步方法:public synchronize void xxx(){

        //方法体

       }

   死锁问题:两个线程在运行时都在等待对方的锁,这样便造成了程序的停滞,这种现象称为死锁!

转载于:https://www.cnblogs.com/FallIntoDarkness/p/9279363.html

你可能感兴趣的文章
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>