多线程
studyhxz
这个作者很懒,什么都没留下…
展开
-
《多线程编程》学习之六:String的常量池特性,锁对象的改变,volatile关键字
1、String的常量池特性 在JVM中具有常量池缓存功能,如String s1 = "abc"; String s2 = "abd"; 这里s1与s2代表同一个String对象。当我们在同步代码块synchronized(string){ }使用String作为锁对象时,可能会出现问题。看下面例子:例一:测试结果:原创 2016-10-23 16:15:04 · 1251 阅读 · 1 评论 -
《多线程编程》学习之三:停止线程 interrupt()、isInterrupted()、 Thread.interrupted()
1、停止线程1.1 停止不了的线程 interrupt()方法不会终止一个正在运行的线程,它只是给线程打上一个标志。 可见,调用interrupt()方法并没有停止线程。1.2 判断线程是否是停止状态1.2.1 Thread.interrupted():测试当前执行的线程是否已经中断,会清除线程的中断状态。例子一:原创 2016-10-18 14:55:45 · 1174 阅读 · 1 评论 -
《多线程编程》学习之八:方法join()的使用、类ThreadLocal的使用
一、join()方法的使用 一般主线程用于创建与启动子线程,如果子线程的run()方法耗时比较长,主线程常先于子线程结束。如果需要主线程等待子线程执行完毕后再结束,就要用到join()方法。1.1)子线程运行时间不确定,主线程中没法用sleep(?)方法去等待它执行完毕。1.2)使用join()方法解决: join()方法使当前线原创 2016-11-03 13:58:47 · 620 阅读 · 0 评论 -
《多线程编程》学习之九:Lock的使用
一、ReentrantLock类的使用1.1)使用ReenrtantLock类实现同步 在java多线程中,可以使用synchronized关键字实现线程之间的互斥,而JDK1.5新增的ReentrantLock类也能达到类似的效果,且使用上比synchronized更灵活、强大。下面例子中,调用ReentrantLock类的lock()获取锁,调用unlock()释放锁原创 2016-11-05 14:14:54 · 545 阅读 · 0 评论 -
《多线程编程》学习之一:使用多线程及线程安全
1.1 进程和线程的概念进程是受操作系统管理的基本运行单元,而线程可理解为在进程中独立运行的子任务。使用多线程技术,可在同一时间内运行不同的任务,使系统的运行效率提高。 一个运行着的程序至少有一个线程在运行,调用public static void main(String[] args)方法的线程是有JVM创建的。1.2 使用多线程1.2.1 继承Thread类1)原创 2016-10-16 22:01:15 · 1031 阅读 · 0 评论 -
《多线程编程》学习之七:等待/通知机制(一)
今天起开始学习线程之间的通信。等待/通知机制是通过Object类的wait()与notify()方法来实现的,这两个方法在同步方法或同步代码块中才能被执行。wait()方法将当前线程放入“等待执行队列”中,使线程在wait()方法所处代码处停止执行,直到被唤醒或者被中断为止,执行wait()方法会释放对象锁。notify()方法用于通知等待对象锁的其它线程,但执行notify()方法并不会立即释放原创 2016-10-27 14:00:47 · 459 阅读 · 0 评论 -
《多线程编程》学习之十:定时器Timer的使用,线程安全的单例模式
一、定时器Timer的使用 定时器 Timer类主要的作用是设置计划任务,它在内部使用多线程的方式进行处理;而抽象的TimerTask类负责封装任务,它实现了Runnable接口。1)schedule(TimerTask task,Date time) 此方法表示,如果设定的时间早于当前时间,则立即执行;否则等待time指定的时间再执行task任务。原创 2016-11-08 16:21:39 · 4507 阅读 · 0 评论 -
《多线程编程》学习之七:等待/通知机制(二)
1、生产者与消费者问题 利用等待/通知机制,实现一生产与一消费:操作栈。生产者向栈中生产数据,消费者从栈中消费数据,栈的最大容量为1。原创 2016-10-30 20:24:33 · 427 阅读 · 0 评论 -
《多线程编程》学习之五:synchronized同步语句块,静态同步synchronized方法与synchronized(类名.class)代码块
在介绍同步语句块之前,先做一个实验,验证多个线程调用同一个同步方法是随机的。例子一:1)MyList.java2)测试: 可见,在同步方法中的代码是同步打印的,但线程A和线程B是异步执行的,这可能会出现脏读的情况。看下面的例子:例子二:1) 在上面例子的基础上,创建业务类MyListService.java:原创 2016-10-20 13:28:16 · 3042 阅读 · 0 评论