多线程知识概括

1 并发执行

应用程序可以同时运行(一边听歌,一边玩游戏)。 在应用程序中,不同的程序块也是可以同时运行,这种多个程序块同时运行的现象被称为 并发执行。 【在多任务操作系统中,表面上是支持并发执行的,所有的应用程序都是由CPU执行的,对于一个CPU而言,在某个时间点只能运行一个程序。由于CPU运行很快,感觉是并发执行的】

2 进程

在一个操作系统中,每个独立执行的程序都可称为一个进程。(QQ.exe)

3 线程 在一个进程中还可以有多个执行单元同时运行。这些执行单元可以看作程序的一条条线索,被称为线程。 【当一个java程序启动时,就会产生一个进程,该进程会默认创建一个线程,在这个线程上会运行main()方法中的代码】

4 多线程程序

多段代码交替运行。 【看似是同时执行,其实和进程一样,由CPU轮流执行。】

5 线程的创建

1.继承Thread类 2.实现Runnable接口

6 后台线程

setDaemon(true)

新创建的线程默认都是前台线程。 【只要有一个前台线程在运行,这个进程就不会结束,如果一个进程只有后台线程运行,这个进程就会结束】

**7 线程的生命周期及状态转换 **

在Java中,任何对象都有生命周期,线程也不例外。 线程整个生命周期分为5个阶段:

8 线程的调度 JVM会按照特定的机制为程序中的每个线程分配CPU的使用权。这种机制被称为线程的调度。 在计算机中,线程调度有两种模型: 1.分时调度模型 2.抢占式调度模型 JVM默认采用抢占式调度模型,大多数情况下程序员不需要去关心它。

8.1 线程的优先级

线程的优先级用1~10之间的正数表示,数字越大优先级越高。 [处于就绪状态的每个线程都有自己的优先级] main线程具有普通优先级。(5) 【可以通过Thread类的setPriority方法对其进行设置】 8.2 线程休眠

sleep(long millis)

使正在执行的线程暂停,将CPU让给别的线程。这是可以使用静态方法sleep.(该方法让当前正在执行的线程暂停一段时间,进入休眠等待状态。) sleep方法声明抛出InterruptedException异常。因此在调用该方法时应该捕获异常。 注意:sleep时静态方法,只能控制当前正在运行的线程休眠。而不能控制其他线程休眠。 8.3 线程让步

yield()

和sleep类似,区别在于yield方法不会阻塞该线程。只是将线程转换成就绪状态。让系统的调度器重新调度一次。 【当某个线程调用yield()方法之后,只有与当前线程优先级相同或者更高的线程才能获得执行的机会】 8.4 线程插队

join()

当在某个线程中调用其他线程的join()方法时,调用的线程将被阻塞,知道被join()方法加入的线程执行完后它才会继续运行。

9 多线程同步 前提:多个线程去访问同一个资源时,会引发一些安全问题。 解决:实现多线程同步,即限制某个资源在同一时刻只能被一个线程访问。 9.1 同步代码块 Object lock = new Object(); 注意:锁对象的创建代码不能放到run()方法中。 9.2 同步方法 被synchronized修饰的方法在某一时刻只允许一个线程访问,访问该方法的其他线程都会发生阻塞,直到当前线程访问完毕后,其他线程才有机会执行方法。

转载于:https://my.oschina.net/u/4131327/blog/3073933

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值