随笔分类 -  Thread

摘要:1. 案例一 现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分别打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象,代码如下:package read; public class T... 阅读全文
posted @ 2014-06-20 14:43 廖凯林 阅读(241) 评论(0) 推荐(0)
摘要:1. 问题 创建一个User类:package cn.itcast.heima2;public class User implements Cloneable{ private String name; private int age; public User(Stri... 阅读全文
posted @ 2014-06-20 12:01 廖凯林 阅读(2253) 评论(1) 推荐(1)
摘要:1. 概念 阻塞队列的概念和前面提到的缓冲区的概念类似,常见一个固定长队的队列 ,如果队列满的时候 put数据则一致会阻塞等待,直到队列数据被取走后会立即执行put数据操作同样的道理,如果队列为空时进行取数据take操作,则一直会阻塞等待,知道有线程执行了put数据到队列中后才会立即执行take... 阅读全文
posted @ 2014-06-19 17:55 廖凯林 阅读(286) 评论(0) 推荐(0)
摘要:1.CyclicBarrier 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面package org.lkl.thead.foo;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.E... 阅读全文
posted @ 2014-06-19 17:06 廖凯林 阅读(402) 评论(0) 推荐(0)
摘要:1.概念 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数2.案例package org.lkl.thead.foo;import java.util.concurrent.Executo... 阅读全文
posted @ 2014-06-19 15:55 廖凯林 阅读(465) 评论(0) 推荐(0)
摘要:1.目标 假定有一个绑定的缓冲区,它支持 put 和 take 方法。如果试图在空的缓冲区上执行 take操作,则在某一个项变得可用之前,线程将一直阻塞;如果试图在满的缓冲区上执行 put操作,则在有空间变得可用之前,线程将一直阻塞。我们喜欢在单独的等待 set 中保存 put 线程和 take线程... 阅读全文
posted @ 2014-06-19 15:21 廖凯林 阅读(1114) 评论(2) 推荐(0)
摘要:1.概念 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。2.案例package org.lkl.thread;import java.util.concurren... 阅读全文
posted @ 2014-06-18 23:36 廖凯林 阅读(564) 评论(0) 推荐(0)
摘要:1.简介 Callable是一个接口,与Runnable类似,包含一个必须实现的call方法,可以启动为让另一个线程来执行,执行Callable可以得到一个Future对象 该对象可以监听Callable的执行结果 也可以取消该任务的执行2.案例 package org.lkl.thead.foo... 阅读全文
posted @ 2014-06-18 12:16 廖凯林 阅读(324) 评论(1) 推荐(0)
摘要:1. 概念 线程池主要是通过Executors这个类来创建 返回的是ExecutorService对象2.固定大小线程池 例子:创建固定线程数目为3的线程池package org.lkl.thead.foo.threadpool;import java.util.concurrent.Execu... 阅读全文
posted @ 2014-06-18 11:27 廖凯林 阅读(860) 评论(0) 推荐(1)
摘要:1.案例分析-01 通过代码实现火车票出售的例子 在实现代码之前先对问题进行分析:火车票出售应该是在多个窗口进行的(即多个线程),以一个车的班次来说,该班次的火车票张数即为多个窗口共享的数据即这份共享数据为出售特定班次的火车票,这个动作在多个窗口都是不变的,变更的只有火车票的剩余张数.代... 阅读全文
posted @ 2014-06-13 17:50 廖凯林 阅读(885) 评论(0) 推荐(0)
摘要:1.问题引入 多个业务模块针对同一个static变量的操作 要保证在不同线程中 各模块操作的是自身对应的变量对象例如:package org.lkl.thead;import java.util.Random;/** * 线程共享数据 * Function : * @author : Liaok... 阅读全文
posted @ 2014-06-13 15:35 廖凯林 阅读(3905) 评论(4) 推荐(0)
摘要:1.问题的引入 存在一个面试题: 编写代码实现子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,然后再回到主线程又循环100次,如此循环50次。2.问题分析 首先,明确问题中存在两个线程: 一个子线程 一个main线程,线程循环一次要中循环体的内容需要保证为一个整体(即需... 阅读全文
posted @ 2014-06-11 22:05 廖凯林 阅读(292) 评论(0) 推荐(1)
摘要:1.错误的代码package org.lkl.thead.sync;public class ThreadSynchronized { class Outputter{ public void output(String name){ for(int i =... 阅读全文
posted @ 2014-06-05 18:58 廖凯林 阅读(758) 评论(0) 推荐(1)
摘要:案例1间隔1秒以后执行task任务package org.lkl.timer;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TimerFoo { public stati... 阅读全文
posted @ 2014-06-05 18:16 廖凯林 阅读(216) 评论(0) 推荐(0)
摘要:线程的两种实现方式 继承Thread类Thread thread = new Thread(){ @Override public void run() { while(true){ try { Thread.sleep(500); } catch (In... 阅读全文
posted @ 2014-06-05 17:36 廖凯林 阅读(350) 评论(0) 推荐(0)