![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 89
diweikang
心如止水
展开
-
thread start()方法源码解析
无论用哪种方式实现多线程,最终究其根源都是在调用Thread类的start()方法。而此时就有一个疑问了,若要实现多线程需要覆写其run()方法,而为什么要使用start()启动线程而不直接调用run()方法?1.首先来看一下start()方法的源码,看看这个方法究竟在干什么事情。 /** * Causes this thread to begin execution; the Java Virtual Machine * calls the <code>run原创 2021-07-15 15:53:57 · 1103 阅读 · 0 评论 -
java多线程基本概念与简单实用
概述程序:Program,是一个静态的概念进程:Process,是一个动态的概念进程是程序的一次动态执行过程, 占用特定的地址空间。每个进程都是独立的,由3部分组成cpu、data、code缺点:内存的浪费,cpu的负担线程(Thread)是进程中一个“单一的连续控制流程” (a single sequential flow ofcontrol)/执行路径。线程又被称为轻量级...原创 2016-07-16 10:25:03 · 994 阅读 · 0 评论 -
如何创建并运行Java线程
Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:Tread thread = new Thread();执行该线程可以调用该线程的start()方法:thread.start();在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了。创建线程的两种方式:一种是创建...原创 2016-07-26 21:43:46 · 297 阅读 · 0 评论 -
Java自带的线程池Executors.newFixedThreadPool
线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个线程对象,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。在Java5之前,要实现一个线程池是相当有难度的,现在Java5为我们做好了一切,我们只需要按照提供的API来使用,即可享受线程池带来的极大便利。...原创 2016-09-27 14:20:36 · 6005 阅读 · 0 评论 -
synchronized与Lock的区别
之前面试的时候经常会被问到一个问题,就是synchronized与Lock有什么区别,当时回答的很模糊,回来之后对这个知识点深入了解了一下,现在给自己总结。类别 synchronized Lock 存在层次 Java的关键字,在jvm层面上 是一个类 锁的释放 会自动释放锁(1、以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放...原创 2019-06-29 12:06:34 · 489 阅读 · 0 评论 -
ThreadPoolExecutor讲解(JDK1.6)
使用多线程可以提高程序的执行效率,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效...转载 2019-06-29 17:06:30 · 658 阅读 · 0 评论 -
ThreadLocal讲解
最近面试会被经常问到ThreadLocal的作用和原理,所以这里有必要学习一下。什么是ThreadLocalThreadLoal 被称为线程局部变量,即该变量运行在线程中时,每个线程都独立拥有它而不和其他线程中的这个值相冲突,其目的就使这个变量只属于当前线程,和其他线程无关。ThreadLoal 解决的是变量在不同线程间的隔离性,也就是说不同线程拥有自己的值。ThreadLoca...原创 2019-07-05 22:19:37 · 544 阅读 · 0 评论 -
volatile讲解
一、Java 内存模型中的可见性、原子性和有序性可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。也就是一个线程修改的结果,另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被...原创 2019-07-06 17:42:29 · 226 阅读 · 0 评论 -
CAS机制讲解
我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized确保了线程安全,但是在某些情况下,这并不是一个...转载 2019-07-15 21:53:34 · 1419 阅读 · 0 评论