美文网首页
java并发编程基础

java并发编程基础

作者: __夏天__ | 来源:发表于2018-09-04 18:08 被阅读0次

    java并发编程

    1、什么叫线程?

    一个程序执行多个任务,通常每一个任务成为一个线程。可以同时运行一个以上线程的程序称为多线程程序。

    线程与进程的区别:

    本质区别在于进程拥有自己的一整套变量,而线程则共享数据。

    与进程相比,线程更加轻量级,创建和销毁一个线程的开销比进程小很多。

    线程可能会不安全。

    实际应用举例:一个web服务可能要并发处理多个请求。一个浏览器可以同时下载多个几幅图片。

    javase 1.5后多线程发生了重大变化,增加很多接口和类。

    2、线程的创建方法:

    1、实现Runnable接口。

    2、继承Thread类。

    注意:不要调用Thread类或Runnable接口的run方法。因为直接调用run方法,只会执行同一个线程中的任务,而不会启动线程。应该调用Thread.start方法。这个方法将创建一个执行run方法的新线程。

    3、中断线程

    常用方法:

    //向线程发送中断请求,将线程中断状态标记为true。如果目前该线程被一个sleep调用阻塞,将抛出InterruptedException 异常。

    void interrupt(){}

    //静态方法,判断当前线程是否被中断,会将线程的中断状态标记为false

    static boolean interrupted(){}

    //实例方法,判断当前线程是否被中断

    boolean isInterrupted(){}

    //静态方法,返回代表当前执行线程的Thread对象

    static ThreadcurrentThread(){}

    中断线程的作用是为了实现多线程,在该线程中断其他线程获得运行机会。

    4、线程的几种状态

    创建new,可运行Runnable,被阻塞Blocked,等待waiting,计时终止Timed waiting,被终止Terminated

    被阻塞和等待线程。

    什么时候有可能变成阻塞状态?

    当一个线程试图获取一个内部的对象锁,而该锁被其他线程所拥有,则该线程进入阻塞状态。

    当线程等待另一个线程通知调度器一个条件时,它自己进入阻塞状态。

    有几个方法有一个参数超时,调用他们导致线程进入计时等待。

    线程的终止:

    run方法正常执行退出而死亡。

    因为一个没有捕获的异常终止了run方法而意外死亡。

    线程属性:线程优先级,守护线程,线程组

    什么叫守护线程?

    守护线程

    setDaemon(Boolean f)守护线程的唯一作用就是为其他线程提供服务的。

    线程组是一个可以统一管理的线程的集合。默认的情况下创建的所有的线程属于相同的线程组。

    对象锁

    同步的作用保证数据正确性和一致性。两个线程或两个以上线程要共享对同一数据的存取。java语言提供了Synchronized关键字,并在1.5后引入了ReentrantLock。在执行一段代码前,会给它加上对象锁。别的同步线程如果要运行,必须得等当前线程运行完,才能顺利运行。

    同步方法和同步代码块的区别:

    同步方法是粗粒度的:

    即有synchronized关键字修饰的方法。 

    由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 

    内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

    同步代码块是细粒度的:

    即Synchronized关键字修饰的代码块。

    被该关键字修饰的语句块会自动被加上内置锁,从而实现同步。

    条件对象

    条件对象个人的理解是为了实现某些特定条件下同步,而做出的努力。通过别的线程的一些状态变化,来满足本线程的条件,从而继续运行本线程。

    相关文章

      网友评论

          本文标题:java并发编程基础

          本文链接:https://www.haomeiwen.com/subject/ivngwftx.html