Java多线程
文章平均质量分 64
王先生的副业
屌丝,爱做梦的屌丝。
展开
-
Java 多线程(PART VIII)synchronized(I)
使用synchronized关键字线程不安全的例子: 线程不安全主要存在于“实例变量”,如果是方法内部的私有变量,则不存在“非线程安全”的问题示例代码:package a;class HasSelfPrivateNum{ public void addI(String username) { int num=0; if(username.equals("原创 2017-10-06 19:46:45 · 210 阅读 · 0 评论 -
Java多线程(PART II) CurrentThread()方法
CurrentThread()方法功能:返回代码段正在被哪个线程调用的信息;实例代码:class MyThread implements Runnable{ public MyThread() { System.out.println("构造方法的打印:"+Thread.currentThread().getName()); } @Override p原创 2017-10-05 10:59:55 · 297 阅读 · 0 评论 -
Java 多线程(PART III) isAlive()方法
isAlive()方法功能:判断当前线程是否处于活动状态。示例代码:package a;class IsAliveThread extends Thread{ public IsAliveThread() { System.out.println("构造方法 =="+this.isAlive()); } @Override public void ru原创 2017-10-05 14:38:22 · 404 阅读 · 0 评论 -
Java 多线程(PART IV) sleep()方法
sleep()方法:功能:在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)示例代码:package a;class SleepTestThread extends Thread{ @Override public void run() { try { System.out.println("run threadname ="+this.原创 2017-10-05 15:38:04 · 234 阅读 · 0 评论 -
Java 多线程 (PART V) yield()方法
yield()方法功能:让线程放弃当前的CPU资源,让其他的任务去占用CPU的执行时间。 注:放弃的时间不确定,可能刚刚放弃,马上又获得CPU时间片示例代码:package a;class YieldThread extends Thread{ @Override public void run() { long beginTime=System.currentTim原创 2017-10-05 16:27:48 · 292 阅读 · 0 评论 -
Java 多线程(PART VI) 线程状态图解
图解这是网上出现频率最高的一张图: 我用AI重新画了一遍(adobe illustrator 软件不错,但是我不太会用)。 主要有那么5种状态:新建状态:此时线程对象已经被创建,但是还是没有调用start()方法,如果调用run()方法线程不会启动。可执行状态:注:这是唯一可以进入running状态的状态,也叫就绪状态。 此时已经调用方法start(),JVM会为起创建方法调用栈和程序计数器,原创 2017-10-05 20:46:27 · 426 阅读 · 0 评论 -
Java 多线程 (PART VII) 使用join()方法保证线程的执行顺序
谁先被调用?示例代码:package a;class JoinThread extends Thread{ @Override public void run() { for(int i=0;i<10;i++) { System.out.println(this.currentThread().getName()+" "+i);原创 2017-10-05 22:21:05 · 370 阅读 · 0 评论 -
Java 多线程 (PART XIX) 使用Condition实现线程的顺序执行
join的实现前面介绍了,如何使用jion方法实现线程的顺序执行。 http://blog.csdn.net/uncle_gy/article/details/78163215condition的实现package condition123;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.原创 2017-10-12 10:47:42 · 263 阅读 · 0 评论 -
Java 多线程(PART XX) TimerTask
Thread和TimerTaskThreadTimerTask这是一个任务 可以看到他们都实现了Runnable接口. 但是TimerTask是一个abstract类。TimerTask的主要方法 如果想让TimerTask执行任务只需要重写run方法。Timer官方API的介绍: 示例代码:package timerTest;import java.util.Calendar;i原创 2017-10-12 12:35:43 · 239 阅读 · 0 评论 -
Java多线程(PART XXI)多线程和单例模式
一般的单例模式。http://blog.csdn.net/uncle_gy/article/details/77962501单例模式和线程安全单例模式分为懒汉模式和饿汉模式。 其中饿汉模式是天生的线程安全的。 因为懒汉模式是延时加载的所以在多线程的环境下存在一些不确定的因素。懒汉模式线程不安全示例代码class MyObject{ private static MyObject myOb原创 2017-11-07 17:49:20 · 335 阅读 · 0 评论 -
java创建线程的三种方式
java创建线程有三种方式:1:实现Runnable接口(无返回值) 2:继承Thread类(无返回值) 3:使用ExecutorService、Callable、Future(有返回值)实现Runnable接口java 依靠接口来实现多态,所以在实现了Runnable接口的同时可以继承其他的类。Thread类的构造方法可以接受一个Runnable参数。package tablejava;cl原创 2017-09-07 09:08:26 · 461 阅读 · 0 评论 -
Java 多线程(PART I)进程和线程
进程当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程线程: 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是原创 2017-10-04 16:21:39 · 295 阅读 · 2 评论 -
Java 多线程 (PART XVIII) Lock(II)用lock实现生产者消费者模式
Object和ConditionObject类中的方法有很多可以使用Condition中的方法来代替。 Object Condition wait() await() wait(long timeout) await(long time,TimeUnit unit) notify() signal() notifyAll() signalAll()由这张表可以原创 2017-10-10 20:37:43 · 332 阅读 · 0 评论 -
Java 多线程(PART IX) synchronized(II) 对对象进行加锁
此代码用于证明线程锁的是对象:示例代码:package a;class MyObject{ public void methodA() { try { System.out.println("begin methodA threadName="+Thread.currentThread().getName()); Thread原创 2017-10-06 22:07:57 · 269 阅读 · 0 评论 -
Java 多线程 (PART X)synchronized (III)synchronized的几种格式
synchroized的几种格式:对象锁synchronized同步方法(非静态方法)格式:synchronized public void Method(){ /** Method body */}作用:对类的对象进行加锁,保证同一时间只有一个线程可以访问当前方法。 和其他锁的效果:synchronized(this)同步代码块格式:public void Method原创 2017-10-08 16:34:35 · 322 阅读 · 0 评论 -
Java 多线程 (PART XI)synchronized(IV)关于synchronized(非this对象X)
格式:public Object myobject=new Object();public void Method(){ synchronized (myobject){ /** block body */ }}作用:不会锁定当前对象,在多个线程持有“对象监视器”为同一个对象(X)的前提下,同一个时间只有一个线程可以执行synchronized(非this对原创 2017-10-08 17:32:21 · 233 阅读 · 0 评论 -
Java 多线程 (PART XII)synchronized(V) 非this 对象X和String常量池
String常量池:String常量池,是java为了保存字符串常量在方法区里开辟的一段空间,在执行如String str=”aa”;是会先检查常量池中有没有“aa”,如果有则直接让str指向常量池中的“aa”,如果没有则会新建一个“aa”,并且将str指向“aa”。String和synchronized:如果使用String作为对象锁,如果字符串相同则加锁的对象是同一个。示例代码class Ser原创 2017-10-08 21:14:41 · 305 阅读 · 0 评论 -
Java 多线程 (PART XIII) 死锁和检测死锁
死锁产生的条件1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只原创 2017-10-08 22:25:09 · 274 阅读 · 0 评论 -
Java 多线程 (PART XIV) volatile关键字和变量在内存中的工作过程
volatile关键字:用法:修饰变量 作用:保证数据的可见性,每次都从主内存中读取变量的值。 缺点:在多线程环境中不可以保证数据的原子性。变量在内存中的工作过程 在多线程的环境中load和asign操作会多次执行,在一个线程执行load操作后没有写回数据,此时另一个线程可能也执行load操作。此时就出现了线程安全问题。原创 2017-10-09 17:03:10 · 286 阅读 · 0 评论 -
Java 多线程 (PART XV) wait()/notify()方法
线程的状态线程状态图(还是这张图) 进入runnable状态的条件1:调用sleep方法后经过的时间超过了指定的休眠时间 2:线程调用的IO阻塞已经返回,阻塞方法执行完毕 3:线程调用的jion的线程执行完毕 4:正在运行running状态的线程主动调用yield方法放弃对CPU资源的占用 5:线程获得同步监视器从running状态离开的条件1:线程正常结束,或者异常终止 2:线程调用s原创 2017-10-09 22:10:24 · 292 阅读 · 0 评论 -
Java 多线程 (PART XVI)生产者消费者(I) 单个生产者单个消费者
图解:代码:package produceandconsume;class ValueObject { //缓冲区 public static String value = "";}class P { private Object lock; public P(Object lock) { this.lock = lock; } publ原创 2017-10-10 13:59:08 · 288 阅读 · 0 评论 -
Java 多线程 (PART XVII) Lock (I) Lock实现线程同步
ReentrantLock类ReentrantLock类可以实现和synchronized关键字一样的功能。示例代码package hello;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Service { private Lock lock = n原创 2017-10-10 19:16:07 · 229 阅读 · 0 评论 -
Java多线程(PART XXIV)公平锁和非公平锁
定义公平锁:公平锁表示线程获取锁的顺序是按照线程加锁的顺序来分配的。示例代码:import java.util.concurrent.locks.ReentrantLock;import java.lang.Thread;class MyService{ private ReentrantLock lock; public MyService(boolean isFair){原创 2017-11-13 16:44:44 · 287 阅读 · 0 评论