随笔分类 -  多线程

摘要:开启了9个线程分别取去执行任务,但同时只能有3个线程处于运行中,其余的处于block状态,等某个线程运行完后,再将block状态的线程唤醒去执行,直到所有的任务执行完成,这样做的一个原因是当系统中有大量线程,比如有10000个线程在运行时,CPU在线程之间切换可能导致效率很低,我只让有限的线程比如1 阅读全文
posted @ 2019-04-16 15:25 踏月而来 阅读(881) 评论(0) 推荐(0)
摘要:public interface MyLock { void lock () throws InterruptedException; void lock(long millis) throws TimeoutException , InterruptedException ,ParametersI 阅读全文
posted @ 2019-04-16 14:26 踏月而来 阅读(203) 评论(0) 推荐(0)
摘要:线程T1持有锁A,再去获取锁B,线程T2持有锁B,再去获取锁A,这时候线程T1获取不到锁B,线程T2获取不到锁A,就发生死锁了 阅读全文
posted @ 2019-04-15 15:18 踏月而来 阅读(330) 评论(0) 推荐(0)
摘要:一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 内存可见性:即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的 内存屏障(memory barrier):如果你的字段是volatile,Java内存模型将在写操作后插入一个写屏障指令, 阅读全文
posted @ 2019-04-14 19:32 踏月而来 阅读(187) 评论(0) 推荐(0)
摘要:Interrupt ,给线程发送一个中断信号,如给t1线程发送中断信号,t1.interrupt(); isInterrupted() 检测线程的中断信号状态 ,返回true的条件是线程是alive的,线程被中断了。如果线程已经结束了not alive,则返回false wait和sleep和joi 阅读全文
posted @ 2019-04-14 13:28 踏月而来 阅读(1269) 评论(0) 推荐(0)
摘要:Java中的线程可以分为两类,即非守护线程和守护线程。 关于守护线程要注意的是: (1)当jvm中只剩下守护线程时,JVM会退出,所以不要在守护 线程中做比较重要的操作,比如文件读写等 (2)在Daemon线程中产生的新线程也是Daemon的 (3) 守护线程结束只与JVM中是否还有非守护线程右关, 阅读全文
posted @ 2019-04-13 23:17 踏月而来 阅读(248) 评论(0) 推荐(0)
摘要:对共享数据的访问和修改要在同步代码块里 同步代码块的代码是顺序执行的,所以能够保证共享数据的安全性 阅读全文
posted @ 2019-04-12 11:40 踏月而来 阅读(198) 评论(0) 推荐(0)
摘要:1 使用继承thread类,重写run方法,没有传入runable对象 调用线程的start方法,做了什么事情。调用start方法后,start方法里面会调用一native方法start0,然后由虚拟机去调用线程的run方法 由于线程的设计用到了模板方法这种设计模式 重写之后,线程执行的就是我们自己 阅读全文
posted @ 2019-04-12 10:12 踏月而来 阅读(947) 评论(0) 推荐(0)
摘要:启动线程用start方法而不是用run方法 start 方法会调用start0方法,start0是native方法,会启动一个线程,由虚拟机去调用线程的run方法,这里由于重写了父类的run方法,所以调用子类的run方法 用start启动线程,打印的是 说明创建了新的线程,线程名字是Thread-T 阅读全文
posted @ 2019-04-11 23:23 踏月而来 阅读(863) 评论(0) 推荐(0)
摘要:使用线程池的原因 服务器创建和销毁线程要花费时间和系统资源,每个线程本身都会占用一定的内存(200多K) 系统不可能无限的创建线程 ,线程数太多,cpu在切换线程时候,会影响效率 使用线程池的好处:提高效率和复用 线程池 任务队列:可以往里面添加任务 拒绝策略:向任务队列提交的任务大于某一个数量限制 阅读全文
posted @ 2019-04-01 16:23 踏月而来 阅读(1255) 评论(0) 推荐(0)
摘要:当前线程等待join的线程执行完才执行 下面的例子是:当前线程是main线程,join的线程是a线程 阅读全文
posted @ 2019-04-01 11:52 踏月而来 阅读(256) 评论(0) 推荐(0)
摘要:① wait() 与 notify/notifyAll 方法必须在同步代码块中使用 synchronized修饰的同步代码块或方法里面调用wait() 与 notify/notifyAll()方法 ② wait() 与 notify/notifyAll() 区别 当执行wait()时,线程会把持有的 阅读全文
posted @ 2019-04-01 10:57 踏月而来 阅读(1069) 评论(0) 推荐(0)
摘要:是否引起线程安全问题要看在静态方法中是否使用了静态成员。 因为,在多线程中使用同一个静态方法时,会复制一份代码,所以方法是安全。如果该静态方法不去操作一个静态变量,不会引起安全性问题。但是,如果该静态方法修改了一个静态字段,则需要静态方法中采用同步代码块进行安全处理 阅读全文
posted @ 2019-03-30 09:36 踏月而来 阅读(1103) 评论(0) 推荐(0)
摘要:Synchronized 存在明显的一个性能问题就是读与读之间互斥 ReadWriteLock 可以实现读与读不互斥,读与写互斥,写与写互斥 可重入 : 即允许一个线程多次获取同一个锁 连接:https://www.jianshu.com/p/9cd5212c8841 阅读全文
posted @ 2018-12-14 15:24 踏月而来 阅读(134) 评论(0) 推荐(0)