多线程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值