• 【今日之星】李宝:立志做大国工匠 2019-11-10
  • 《杭州运河歌谣》:一条黄金铺就的水道 2019-10-16
  • 青岛国际啤酒节7月开幕 青岛西海岸邀客把酒狂欢--旅游频道 2019-10-11
  • 提升双创教育质量的关键在机制协同 2019-10-08
  • 你的劳动创造财富的解释老汉领教了,猪一样的逻辑 2019-09-26
  • 美国反邪教组织“开放思想基金会”简介 2019-09-26
  • 首批6只战略配售基金8天领到出生证 最早11日就可认购 2019-09-03
  • 太原小小少年 巧手变废为宝 2019-08-29
  • 国务院关税税则委员会发布公告决定对原产于美国的500亿美元进口商品加征关税 2019-08-29
  • 中国武器亮相国外 铁甲雄狮大秀视觉盛宴 2019-08-24
  • beat365手机版官方网站:多线程知识

    来源:互联网 编辑:王志 手机版

    内蒙古11走势选5走势图 www.va5y.com

    1、并发编程三要素?

    1)原子性

    原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。

    2)可见性

    可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。

    实现可见性的方法:

    synchronized或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。

    3)有序性

    有序性,即程序的执行顺序按照代码的先后顺序来执行。

    2、多线程的价值?

    1)发挥多核CPU的优势

    多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的,采用多线程的方式去同时完成几件事情而不互相干扰。

    2)防止阻塞

    从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。

    3)便于建模

    这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

    3、创建线程的有哪些方式?

    1)继承Thread类创建线程类

    2)通过Runnable接口创建线程类

    3)通过Callable和Future创建线程

    4.创建线程的三种方式的对比?

    1)采用实现Runnable、Callable接口的方式创建多线程。

    优势是:

    线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。

    在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

    劣势是:

    编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

    2)使用继承Thread类的方式创建多线程

    优势是:

    编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

    劣势是:

    线程类已经继承了Thread类,所以不能再继承其他父类。

    3)Runnable和Callable的区别

    ??Callable规定(重写)的方法是call(),Runnable规定(重写)的方法是run()。

    ??Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。

    ??Call方法可以抛出异常,run方法不可以。

    ??运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

    5、线程的状态流转图

    线程的生命周期及五种基本状态:

    Java线程具有五中基本状态

    1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

    2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

    3)运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

    4)阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:

    1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;

    2.同步阻塞 — 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

    3.其他阻塞 — 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5)死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

    6.什么是线程池? 有哪几种创建方式?

    线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。

    java 提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池。

    四种线程池的创建:

    (1)newCachedThreadPool创建一个可缓存线程池

    (2)newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。

    (3)newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

    (4)newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务。

    7.线程池的优点?

    1)重用存在的线程,减少对象创建销毁的开销。

    2)可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。

    3)提供定时执行、定期执行、单线程、并发数控制等功能。

    8.Java中的同步集合与并发集合有什么区别?

    同步集合类:

    ??Vector

    ??Stack

    ??HashTable

    ??Collections.synchronized方法生成

    并发集合类:

    ??ConcurrentHashMap

    ??CopyOnWriteArrayList

    ??CopyOnWriteArraySet等

    9.同步集合与并发集合的区别

    同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。同步集合比并发集合会慢得多,主要原因是锁,同步集合会对整个Map或List加锁,而并发集合例如ConcurrentHashMap,

    把整个Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段(JDK1.8版本底层加入了红黑树)。

    10.常用的并发工具类有哪些?

    ??CountDownLatch

    ??CyclicBarrier

    ??Semaphore

    ??Exchanger

    11.CyclicBarrier和CountDownLatch的应用场景?

    CountDownLatch?:?一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。?CyclicBarrier?:?N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。

    CountDownLatch的使用场景:

    在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作, 这个时候就可以使用CountDownLatch。

    CyclicBarrier 使用场景

    CyclicBarrier可以用于多线程计算数据,最后合并计算结果的应用场景。

    12.CyclicBarrier和CountDownLatch的区别

    1)CountDownLatch简单的说就是一个线程等待,直到他所等待的其他线程都执行完成并且调用countDown()方法发出通知后,当前线程才可以继续执行。

    2)cyclicBarrier是所有线程都进行等待,直到所有线程都准备好进入await()方法之后,所有线程同时开始执行!

    3)CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset() 方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。

    4)CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。如果被中断返回true,否则返回false。

    13.synchronized的作用?

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。

    synchronized既可以加在一段代码上,也可以加在方法上。

    14.volatile关键字的作用

    对于可见性,Java提供了volatile关键字来保证可见性。

    当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。

    从实践角度而言,volatile的一个重要作用就是和CAS结合,保证了原子性,详细的可以参见java.util.concurrent.atomic包下的类,比如AtomicInteger。

    15.什么是CAS

    CAS是compare and swap的缩写,即我们所说的比较交换。

    cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据,性能较悲观锁有很大的提高。

    多线程知识.doc

    多线程知识 - 1、并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,...[本文更多相关]

    多线程基础知识详解.doc

    多线程基础知识详解 - 学习好资料 欢迎下载 1. 进程与线程有那些区别和联系?...[本文更多相关]

    多线程知识点整理.doc

    多线程知识点整理 - 显卡的架构,显卡的工作原理!英特尔,英伟达,AMD... 多线程知识点整理_计算机软件及应用_IT/计算机_专业资料。显卡的架构,显卡的工作原理!英特尔,......[本文更多相关]

    JAVA中多线程知识点.doc

    JAVA中多线程知识点 - 充分归纳Java开发中的多线程知识点,对于充分掌握多...[本文更多相关]

    线程、多线程基本知识.doc

    线程、多线程基本知识 - C#线程基础知识 1. 相关概念 进程(process...[本文更多相关]

    多线程常见面试题.doc

    多线程常见面试题 - 1) 现在有 T1、T2、T3 三个线程,你怎样保证 T2...[本文更多相关]

    深入理解 Java 多线程核心知识:跳槽面试必备.doc

    深入理解 Java 多线程核心知识:跳槽面试必备多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平 时工作中如若使用不当会出现数据错乱......[本文更多相关]

    Android多线程相关知识点总结.doc

    Android多线程相关知识点总结 - Android 多线程相关知识点总结 1...[本文更多相关]

    c语言多线程常用知识.doc

    c语言多线程常用知识_计算机软件及应用_IT/计算机_专业资料。pthread_...[本文更多相关]

    多线程编程-基础篇四.doc

    多线程编程-基础篇四 - 关于这两个方法,有很多的内容需要说明.在下面的说明中可...[本文更多相关]

    理解多线程.doc

    理解多线程 - java编程语言基础知识 多线程编程基础... 理解多线程_计算机软件及应用_IT/计算机_专业资料。java编程语言基础知识多线程编程基础 一:理解多线程 多线程......[本文更多相关]

    多线程笔记.doc

    多线程笔记 - 1. 进程和线程的区别 (1) 根本区别:进程作为资源分配的单位,线程调度和执行的单位 2. java 下实现多线程 (1) 继承 Thread 重写 run。 实用......[本文更多相关]

    IOS多线程知识总结.doc

    IOS多线程知识总结_计算机软件及应用_IT/计算机_专业资料。ios 多线程 IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主 队列/串行队列/同步任务/......[本文更多相关]

    什么是多线程(精华版).doc

    什么是多线程(精华版) - 《什么是多线程》 试题: 什么是多线程 答案: 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 【相关阅读】 多线程(英语:......[本文更多相关]

    多线程开发 知识点作者张全胜.doc

    多线程开发 知识点作者张全胜 - 多线程开发 2012-2-8 现在的理解 多线程开发的好处: 的使用率,采用多线程的方式去同时完成几件事情而互不干扰,如当前 为了......[本文更多相关]

    多线程与并发面试题.doc

    多线程与并发面试题 - JAVA 多线程和并发基础面试问答 原文链接 译文连接 作者:Pankaj 译者:郑旭东 校对:方腾飞 多线程和并发问题是 Java 技术面试中面试官比较......[本文更多相关]

    什么是多线程全面版.doc

    什么是多线程全面版 - 《什么是多线程》 试题: 什么是多线程 答案: 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 【相关阅读】 多线程(英语:......[本文更多相关]

    线程的基本知识.doc

    线程的基本知识_计算机软件及应用_IT/计算机_专业资料。第 6 章 线程的基础知识...因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共 ......[本文更多相关]

    java线程知识点总结.doc

    java线程知识点总结 - 进程: 是一个正在执行的程序, 每一个进程执行都有一...[本文更多相关]

    Java多线程详解.doc

    Java多线程详解 - 知识点整理 2:多线程详解 线程对象是可以产生线程的对象...[本文更多相关]

    功能丰富的应用软件包BonusPak_电脑基础知识_IT/计算机_专业资料.txt

    功能丰富的应用软件包BonusPak_电脑基础知识_IT/计算机_专业资料。功能丰富的应用...这种流行的“CIM”前端的32位多线程版本具有与工作台界面的无缝集成特性、一种......[本文更多相关]

    win7光盘说明_电脑基础知识_IT/计算机_专业资料.txt

    win7光盘说明_电脑基础知识_IT/计算机_专业资料?!断低炒笕玏IN7 SP1(32位)...添加经典小巧的智能ABC输入法 设置IE8默认为多线程下载,大幅度提供下载速度 加速......[本文更多相关]

    提高电脑运行速度_电脑基础知识_IT/计算机_专业资料.txt

    提高电脑运行速度_电脑基础知识_IT/计算机_专业资料。电脑 ●1)在系统中安装...7、让IE支持多线程下载 一般情况下,大家都使用多线程下载软件如Flashget等下载......[本文更多相关]

    Lanhelper_电脑基础知识_IT/计算机_专业资料.txt

    Lanhelper_电脑基础知识_IT/计算机_专业资料。LanHelper 目录 简介功能其他编辑本...(是否可写、只读或者密码?;さ?、共享备注等,而且由于使用了多线程,每秒钟最......[本文更多相关]

    更新日志_电脑基础知识_IT/计算机_专业资料.txt

    更新日志_电脑基础知识_IT/计算机_专业资料。所有的升级版本放到原来的程序目录中...采用了多线程操作数据库,解决了服务器与网络硬件的不给力,在线用户数有望过百.......[本文更多相关]

    计算机进程_电脑基础知识_IT/计算机_专业资料.txt

    计算机进程_电脑基础知识_IT/计算机_专业资料。 第一:进程是什么 进程为应用...一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的......[本文更多相关]

    [多线程知识]相关文章:

  • 多线程系列之三-Slim读写锁
  • 多线程系列之三-Slim读写锁
  • 多核程序设计课件4-Linux多线程编程
  • 多核程序设计课件4-Linux多线程编程
  • JAVA多线程编程详解 详细操作例子
  • JAVA多线程编程详解 详细操作例子
  • 多线程程序设计-PPT课件
  • 多线程程序设计-PPT课件
  • Java多线程、并发编程知识点总结
  • Java多线程、并发编程知识点总结
  • java课件-多线程.ppt
  • java课件-多线程.ppt
  • java课件多线程.ppt
  • java课件多线程.ppt
  • java课件-多线程.ppt17
  • java课件-多线程.ppt17
  • java课件-多线程.ppt 共29页
  • java课件-多线程.ppt 共29页
  • 多线程程序设计-PPT课件 共44页
  • 多线程程序设计-PPT课件 共44页
  • 多线程知识相关搜索
    最新推荐
    热门推荐
  • 【今日之星】李宝:立志做大国工匠 2019-11-10
  • 《杭州运河歌谣》:一条黄金铺就的水道 2019-10-16
  • 青岛国际啤酒节7月开幕 青岛西海岸邀客把酒狂欢--旅游频道 2019-10-11
  • 提升双创教育质量的关键在机制协同 2019-10-08
  • 你的劳动创造财富的解释老汉领教了,猪一样的逻辑 2019-09-26
  • 美国反邪教组织“开放思想基金会”简介 2019-09-26
  • 首批6只战略配售基金8天领到出生证 最早11日就可认购 2019-09-03
  • 太原小小少年 巧手变废为宝 2019-08-29
  • 国务院关税税则委员会发布公告决定对原产于美国的500亿美元进口商品加征关税 2019-08-29
  • 中国武器亮相国外 铁甲雄狮大秀视觉盛宴 2019-08-24
  • 淘宝开奖 盈丰彩票 ag超玩会微博官方微博 福彩3d开奖结果今天 高频彩登录 内蒙古快三最长遗漏号 大乐透中2十o有奖吗 重庆福彩欢乐生肖走势图 今天p3试机号 上海快3走势图1000 时时彩组3稳赚技巧 11选5任5有多少注组合 期期中大奖 广西11选5投注 彩票开奖查询网站