随笔分类 -  Java多线程

1
摘要:一、读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA的并发 阅读全文
posted @ 2018-06-07 13:49 平凡希 阅读(57082) 评论(14) 推荐(19) 编辑
摘要:一、死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。 所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的 阅读全文
posted @ 2018-01-22 13:40 平凡希 阅读(31799) 评论(1) 推荐(12) 编辑
摘要:一、Callable 与 Runnable 先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法: 由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。 Callable位于java.util.concurrent包下,它也是一个 阅读全文
posted @ 2018-01-17 16:22 平凡希 阅读(21482) 评论(4) 推荐(12) 编辑
摘要:一道编程题如下: 实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc。 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6次字符,关键是如何保证顺序一定是abc...呢。所以此题需要同步机制来解决问题! 令打印 阅读全文
posted @ 2017-12-18 16:11 平凡希 阅读(19990) 评论(4) 推荐(4) 编辑
摘要:一、两个线程一个生产者一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个。 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用标记或加锁机制。 wait() / nofity() 方法是基类Object的两个方法,也就意味着 阅读全文
posted @ 2017-11-30 21:33 平凡希 阅读(6570) 评论(1) 推荐(1) 编辑
摘要:一、进程与线程 1、进程 进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。操作系统中,几乎所有运行中的任务对应一条进程(Process)。一个程序进入内存运行,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能。描述进程的有一句话非常经典 阅读全文
posted @ 2017-11-22 15:54 平凡希 阅读(4657) 评论(0) 推荐(1) 编辑
摘要:一、为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么 阅读全文
posted @ 2017-11-20 16:38 平凡希 阅读(46593) 评论(0) 推荐(0) 编辑
摘要:一、对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。这句话从字面上看起来很容易理解,但是真正理解并不是那么 阅读全文
posted @ 2017-11-14 16:22 平凡希 阅读(2933) 评论(7) 推荐(5) 编辑
摘要:在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务, 阅读全文
posted @ 2017-10-24 14:36 平凡希 阅读(8004) 评论(3) 推荐(3) 编辑
摘要:一、ReentrantLock 1、ReentrantLock简介 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特 阅读全文
posted @ 2017-10-15 20:31 平凡希 阅读(31808) 评论(4) 推荐(9) 编辑
摘要:一、线程优先级的介绍 java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。 java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。用户线程一般 阅读全文
posted @ 2017-07-07 16:44 平凡希 阅读(9531) 评论(0) 推荐(2) 编辑
摘要:一、interrupt() 说明 interrupt()的作用是中断本线程。本线程中断自己是被允许的;其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限。这有可能抛出SecurityException异常。如果本线程是处于阻塞状态:调用线程的wait(), w 阅读全文
posted @ 2017-06-27 23:29 平凡希 阅读(6420) 评论(2) 推荐(2) 编辑
摘要:一、join()介绍 join() 定义在Thread.java中。join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解: 说明: 上面的有两个类Father(主线程类)和Son(子线程类)。因为Son是在Father中创建并启动的,所以, 阅读全文
posted @ 2017-06-07 23:44 平凡希 阅读(1777) 评论(0) 推荐(0) 编辑
摘要:一、sleep()介绍 sleep() 定义在Thread.java中。sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待c 阅读全文
posted @ 2017-05-24 00:28 平凡希 阅读(35793) 评论(1) 推荐(0) 编辑
摘要:一、yield()介绍 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行! 二、yie 阅读全文
posted @ 2017-04-21 16:47 平凡希 阅读(1513) 评论(0) 推荐(0) 编辑
摘要:一、wait()、notify()、notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。而notify()和notifyAll 阅读全文
posted @ 2017-04-02 21:58 平凡希 阅读(4870) 评论(3) 推荐(3) 编辑
摘要:1、synchronized原理 在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。不同线程对同步锁的访问是互斥的。也 阅读全文
posted @ 2017-03-23 00:18 平凡希 阅读(2026) 评论(1) 推荐(1) 编辑
摘要:一、多线程的同步 1、为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。 解决方法:在线程使用一个资源时为其加锁即可。 访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。 2、程序实例 用一个取钱的 阅读全文
posted @ 2017-03-09 22:46 平凡希 阅读(2834) 评论(1) 推荐(0) 编辑
摘要:一、继承Thread类创建线程类 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。 Thread类的声明如下: 可以看到,Thread本身就实 阅读全文
posted @ 2017-02-28 22:42 平凡希 阅读(2696) 评论(1) 推荐(1) 编辑
摘要:一、进程 进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。操作系统中,几乎所有运行中的任务对应一条进程(Process)。一个程序进入内存运行,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能。描述进程的有一句话非常经典——进程是系统进 阅读全文
posted @ 2017-02-20 22:12 平凡希 阅读(3415) 评论(0) 推荐(0) 编辑

1