java多线程
Z_DZ
这个作者很懒,什么都没留下…
展开
-
Java的Thread类的常用方法
原创 2018-10-03 10:32:59 · 404 阅读 · 0 评论 -
Thread.join()
线程A的run方法中调用了线程B的join,此时线程A处于阻塞状态,直到线程B执行完毕或者死亡的时候,线程A才会继续执行。原创 2018-10-06 22:41:54 · 3041 阅读 · 0 评论 -
多线程一定比单线程快吗
不一定。因为,存在线程创建和上下文切换的时间开销。原创 2018-10-24 19:22:21 · 1542 阅读 · 0 评论 -
单核处理器支持多线程编码吗?
支持。CPU通过给每个线程分配CPU时间片来实现这个机制。原创 2018-10-24 19:24:50 · 1008 阅读 · 0 评论 -
时间片
时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停的切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是十几毫秒(ms)。...原创 2018-10-24 19:28:12 · 3318 阅读 · 0 评论 -
上下文切换
CPU通过时间片分配算法来循环执行任务。当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以在加载这个任务的状态。所以任务从保存到加载的过程就是一次上下文切换。...原创 2018-10-24 19:31:35 · 150 阅读 · 0 评论 -
简述volatile关键字
在多线程并发编程中,synchronized和volatile都扮演着重要角色,volatile是轻量级的synchronize,在多处理器开发中,扮演了保证共享变量的“可见性”。可见性的意思是当一个线程修改个一个用volatile修饰的共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronize的使用和执行成本更低,因为它不会引起线程上下文的...原创 2018-10-24 19:42:27 · 145 阅读 · 0 评论 -
如何减少上下文切换
无锁并发编程,CAS算法,使用最少线程,使用协程。原创 2018-10-24 19:44:33 · 298 阅读 · 0 评论 -
volatile的两条实现原则
1.Lock前缀指令会引起处理器缓存回写到内存。2.一个处理器的缓存回写到内存中会导致其他处理器的缓存无效。原创 2018-11-07 00:13:16 · 295 阅读 · 0 评论 -
happens-before原则
如果ActionA和ActionB属于同一个线程,那么就说明ActionA happens-before ActionB。 如果ActionA是unlock操作,而ActionB是lock操作,那么ActionA happens-before ActionB。 如果A是对volatile变量的写操作,ActionB是对同一个变量的读操作,那么ActionA happ...原创 2018-10-06 21:57:15 · 753 阅读 · 0 评论 -
一个线程将变量修改之后,其他线程怎么同步更新
将变量用volatile修饰volatile boolean keepRunning;原创 2018-10-06 21:48:05 · 3094 阅读 · 0 评论 -
线程怎么让出CPU执行权
Thread.yield();原创 2018-10-06 21:45:13 · 2288 阅读 · 0 评论 -
Java用实现runnable接口的方法,实现多线程
在java中实现Runnable接口,用于多线程。package per.runnable;class MyThread implements Runnable { private String name; public MyThread(String name) { this.name = name; } public void run() { for (int...原创 2018-10-03 23:41:31 · 1352 阅读 · 0 评论 -
Java用继承Thread类的方法,实现多线程
package per.thread;public class MyThread extends Thread { private String name; public MyThread(String n){ name = n; } public void run(){ for (int i = 0; i < 5; i++) { System.out....原创 2018-10-04 00:08:33 · 2618 阅读 · 0 评论 -
线程的生命周期
分类 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。例如:Thread t1=new Thread();就绪(runnable)线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();运行(running)线程获得CPU资源正在执行任务(run(...原创 2018-10-04 00:34:12 · 181 阅读 · 0 评论 -
Java使用synchronized,实现互斥锁
代码package per.thread;import java.io.IOException;public class Test { private int i = 0; private Object object = new Object(); public static void main(String[] args) throws...原创 2018-10-04 00:39:56 · 1669 阅读 · 0 评论 -
Java的Thread 类中的start() 和 run() 方法有什么区别
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。...原创 2018-10-05 19:14:11 · 2376 阅读 · 0 评论 -
Java多线程——中国新说唱
Singer类实现了Runnable接口package per.runnable;public class Singer implements Runnable { private String name; public Singer(String name) { // TODO Auto-generated constructor stub this.name = n...原创 2018-10-05 19:40:31 · 273 阅读 · 0 评论 -
Java中Thread.yield()
Thread.yield( )方法 线程让步。使用了这个方法之后,线程会让出CPU执行权,让自己或者其它的线程运行。也就是说,当前线程调用yield()之后,并不能保证:其它具有相同优先级的线程一定能获得执行权,也有可能是当前线程又进入到“运行状态”继续运行。 ...原创 2018-10-05 19:55:56 · 5433 阅读 · 0 评论 -
Java中volatile关键字
volatile作用: 被它修饰的变量对所有线程的可见。一个线程对这个变量进行了修改,那么其他线程会把这个修改同步过来。被它修饰的变量在JMM中表现为:JMM(Java memory model)会把该线程对应的本地内存中的变量强制刷新到主内存中去;这个写会操作会导致其他线程中的该变量的缓存无效。...原创 2018-10-05 22:46:17 · 130 阅读 · 0 评论 -
实现Runnable接口怎么获取当前线程的名字
Thread.currentThread().getName()原创 2018-10-06 21:43:16 · 6965 阅读 · 1 评论 -
理解偏向锁,轻量锁,重锁
java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。并且锁只能升级不能降级。 在讲这三个锁之前,我先给大家讲清楚自旋和对象头的概念。自旋现在假设有这么一个场景:有两个线程A,B在竞争一个锁,假设A拿到了,这个时候B被挂起阻塞,一直等待A释放了锁B才得到使用权。在操作系统中阻塞和唤醒是一个耗时操作,如果A在很短的时间内就释放了锁,当这个...转载 2018-11-07 00:29:28 · 1932 阅读 · 1 评论