JDK的多线程与并发库】的更多相关文章

1.创建多线程 public class MultiThread { public static void main(String[] args) { // 通过继承Thread类 Thread thread = new Thread(){ @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Sys…
java5 中的线程并发库 主要在java.util.concurrent包中 还有 java.util.concurrent.atomic子包和java.util.concurrent.lock子包 java.util.concurrent.atomic包 查看atomic包文档页下面的介绍,可以对基本数据,对数组中的基本数据,对类中的基本数据进行操作. 在对整数进行共享操作时,可以使用 java.util.concurrent.atomic 包下的 AtomicInteger An int…
开启一个线程 实现一个线程的方式有两种:继承Thread类.实现Runnable接口(也存在说三种的情况,第三种是使用线程并发库中的线程池创建一个线程).这两种方法都需要重写Run方法,具体的线程逻辑代码写在Run方法中.其实Thread类就实现了Runnable接口,并且添加了一些常用的方法.并没有什么说法是使用哪种方式存在效率高低的问题,推荐使用实现Runnable接口的方式,因为更加面向对象,而且实现一个接口比继承一个类更灵活.我们可以使用匿名内部类的方式很方便的开启一个线程(使用Trea…
一.多线程基础知识 1.传统使用类Thread和接口Runnable实现 1)在Thread子类覆盖的run方法中编写运行代码 2)在传递给Thread对象的Runnable对象的run方法中编写代码 /** * 多线程并发安全问题 */ public class ThreadDemo05 { public static String name = "马冬梅"; public static String gender = "女"; public static voi…
我们先通过一道面试题来了解传统的线程同步通信. 题目:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序. 我没有看答案,先用自己的思路写了一段代码,有一些是借鉴传统的“生产者与消费者”的多线程模型写出来的:[java] view plain copy 在CODE上查看代码片派生到我的代码片package cn.edu.hpu.test; /** * 要求的操作: * 子线程循环10次,接着主线程循环100次,接着又回…
ArrayBlockingQueue LinkedBlockingQueue 数组是连续的一片内存 链表是不连续的一片内存  传统方式下用Collections工具类提供的synchronizedCollection方法来获得同步集合. java5中提供了如下一些同步集合类: > 通过看java.util.concurrent包下的介绍可以知道有哪些并发集合 > ConcurrentHashMap 可以进行并发操作的HashMap,并发的HashMap还有 Collections.synchr…
java.util.concurrent.Lock 1.Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. lock替代synchronized class Outputer { Lock lock = new ReentrantLock(); public void output(String name) { int len = name.length(); l…
1.传统线程机制的回顾 1.1创建线程的两种传统方式 在Thread子类覆盖的run方法中编写运行代码 // 1.使用子类,把代码放到子类的run()中运行 Thread thread = new Thread() { @Override public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.p…
第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象.原始代码如下: package read; public class Test { public static void main(String[] args){ System.out.println("begin:"+(System.currentTimeMillis()/100…
ArrayBlockQueue 可阻塞的队列 > 队列包含固定长度的队列和不固定长度的队列. > ArrayBlockQueue > 看BlockingQueue类的帮助文档,其中有各个方法的区别对比的表格. > 只有put方法和 take 方法才具有阻塞功能 > 用3个空间的队列来演示阻塞队列的功能和效果 /* * 两个线程向队列中放数据,一个线程从队列中取数据 */ public class BlockingQueueTest { public static void m…