JAVA学习笔记整理八(多线程)

原创 2016年05月31日 16:59:31

程序、进程、线程

1.    程序:计算机指令的集合,以文件的形式存储在磁盘上

2.    进程:是程序的一次动态执行过程,经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程

3.    线程:是进程中的一个单一的连续控制流程,多线程值一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行


    多线程:线程通常是抢占式的而不需要时间片分配进程(分配给每个线程相等的CPU时间的进程)。抢占式调度模型就是许多线程处于可以运行状态(等待状态),但实际上只有一个线程在运行。该线程一直运行到它终止进入可运行状态(等待状态),或者另一个具有更高优先级的线程变成可运行状态。在后一种情况下,低优先级的线程被高优先级的线程抢占,高优先级的线程获得运行的机会。

    JAVA中所有线程都是同时启动的,哪个线程先抢到了CPU资源,哪个就先运行

    优点:多线程机制可以同时运行多个程序块,使程序运行的效率变得更高,克服一些传统程序语言无法解决的问题(例如有些包含循环的线程可能需要好一段时间来运算,此时便可以让另一个线程来做其他的处理)

线程的实现

1.    继承Thread类,并覆盖run()方法


为何启动线程使用start()方法而不是直接调用覆写后的run()方法?


→1).没有了多线程的特性,只会和传统程序语言一样按照顺序进行执行,当前一个线程进入死循环时,则永远无法开始下一个线程

→2).使用start()方法时,该线程只能调用一次,否则会抛出异常,但直接调用run()方法的话,则会多次调用

2.    实现Runnable接口(必须依靠Thread类才可以启动多线程)


Thread类和Runnable接口的联系与区别

1.    联系:在Thread类中的run()方法调用的是Runnable接口中的run()方法,也就是说此方法是由Runnable子类完成的,所以说如果继承Thread类实现多线程,必须覆写run()方法。

2.    区别(实现Runnable接口相对于继承Thread类来说,有以下优势)

     1)   避免由于JAVA的单继承性所带来的局限

     2)   增加了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

     3)   适合多个相同代码的线程去处理统一资源的情况


    当使用Thread类实现多线程的时候,程序中启动了2个线程,但是2个线程却分别卖出了各自的3张票,没有达到资源共享的目的。

    而Runnable则可以达到这一目的:


线程的状态

 

1.    创建状态

在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的内存和其他资源,但还处于不可运行状态。

2.    就绪状态

调用start()方法后就开始启动线程,线程进入就绪状态,但并不是马上就开始运行,而是进入一种就绪状态,此时它已经具备了运行条件,只不过在线程队列里排队,等待CPU服务。

3.    运行状态

当处在就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态,此时,自动调用该线程的run()方法。

4.    阻塞状态


5.    终止状态

线程调用stop()方法或者run()方法执行结束后,即处于死亡状态,不具有继续运行的能力。

线程的一些其他方法

1.    取得和设置线程名称



2.    .isAlive()---------------线程是否启动

3.    .jion()-------------------线程强制运行,运行期间其他线程无法运行,只能等待此线程完成之后才可以继续执行,需要进行异常处理

4.    .sleep(time)----------------线程进行休眠,需要进行异常处理

5.    .interrupt()-----------------中断运行,可中断休眠等(唤醒:.notify()、notifyAll())


6.    setDaemon(boolean)--------------后台线程(守护),当仅有守护线程存在时,结束线程(设置为在后台运行,控制台则不会再运行),一般用于死循环等,需要在start()之前

7.    setPriority(Thread.xxx)---------------设置优先级,优先级越高,则越有可能被优先执行(并不完全一定,只是可能性大,只会先运行,但是执行顺序还是由CPU的调度决定)


8.    .yield()--------------线程礼让,让其他线程先执行,其他线程执行完了自己再继续执行

同步与死锁

1.    同步:指多个操作在同一个时段内只能有一个线程进行,其他线程要等待此线程完成之后才可以继续执行(避免一些因为例如延迟之类所导致的异常,例如卖票票数出现负数情况)

同步代码块: Synchronized(同步对象(一般this)){需要同步的代码块}

同步方法:public synchronized void sale(){代码}

2.    死锁:两个程序都在等待彼此先完成,造成程序停滞

3.    关于同步与死锁:多个线程共享同一资源时需要进行同步,以保证资源的完整性,但是过多同步有可能会造成死锁
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java学习笔记2(多线程)

  • 2011-08-30 19:02
  • 210KB
  • 下载

Java学习笔记八——Java多线程初步

Java多线程 概念 为什么使用多线程 线程的调度 主线程&多线程 线程的生命周期 创建线程 概念: 程序:一段静态的代码 进程:程序的一次动态执行过程,包括从加载到执行到执行完毕的...

UNIX多线程学习笔记

  • 2011-08-15 13:46
  • 80KB
  • 下载

多线程学习笔记与学习

  • 2011-07-04 08:28
  • 84KB
  • 下载

java个人学习笔记18(多线程之间通信+等待唤醒机制)

1.多线程之间的通信

Java并发多线程学习笔记

标签(): java 多线程 并发编程 艺术原子操作的实现原理1、术语比较并交换 compare and swap(一个新值和旧值,比较旧值有没有发生变化,如果没有发生变化则交换成新值) CPU流水...

java学习笔记之多线程生产者与消费者

生产者-消费者问题是一个经典的进程同步问题。在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产...

Java多线程学习笔记

刚看了Java的多线程,所以把相关的知识总结记录下,主要包括:多线程概念、线程的创建、线程生命周期、线程控制、线程同步、线程通信以及线程池!

[好程序员训练营]----java基础之多线程部分学习笔记

学习java基础部分也好久了,今天抽空把之前学习的多线程部分的笔记记录一下,算是对我多线程部分的总结吧 废话不多说开始了. 1,首先什么是多线程? 说到线程那我们不得不说一下什么是进程,进程就是 正在...

Java多线程学习笔记

进程和线程的概念 进程:程序(任务)的执行过程。持有资源(共享内存,共享文件)和线程 线程:系统中最小的执行单元。同一进程中有多个线程。 线程共享进程的资源。 线程的交互:互斥/同步Java语言对线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)