- 浏览: 1589914 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Lock 类似 synchronize (让多个线程 执行任务的时候 相互不干扰,不被打断 :互斥) * Condition (让多个线程之间 进行 交流 :通信) * * 例子 : 老大 --> 老二 -->老三 --> 老大 --> 老二 -->老三 */ public class ThreeConditionCommunication2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub final Business bus=new ThreeConditionCommunication2().new Business(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub2(j); } } } ).start(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub3(j); } } } ).start(); for (int j = 0; j < 5; j++) { bus.sub1(j); } } //主要是这里不同 class Business{ Lock lock=new ReentrantLock(); Condition con1=lock.newCondition(); // 1 - 2 通信 Condition con2=lock.newCondition(); // 2 - 3 通信 int step=1; public void sub1(int i){ lock.lock(); try { while(step!=1) con1.await(); for (int j = 0; j < 100; j++) { System.out.println("main thread sequence of "+j+" loop of"+i); } step=2; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int i){ lock.lock(); try { while(step!=2) con1.await(); for (int j = 0; j < 10; j++) { System.out.println("Sub2 thread sequence of "+j+" loop of"+i); } step=3; con2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try { while(step!=3) con2.await(); for (int j = 0; j < 20; j++) { System.out.println("Sub3 thread sequence of "+j+" loop of"+i); } step=1; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } } }
/** * Lock 类似 synchronize (让多个线程 执行任务的时候 相互不干扰,不被打断 :互斥) * Condition (让多个线程之间 进行 交流 :通信) * * 例子 :三个线程之间的互斥 和 通信 */ public class ThreeConditionCommunication { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub final Business bus=new ThreeConditionCommunication().new Business(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub2(j); } } } ).start(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub3(j); } } } ).start(); for (int j = 0; j < 5; j++) { bus.sub1(j); } } // 三个 Condition class Business{ Lock lock=new ReentrantLock(); Condition con1=lock.newCondition(); Condition con2=lock.newCondition(); Condition con3=lock.newCondition(); int step=1; public void sub1(int i){ lock.lock(); try { while(step!=1) con1.await(); for (int j = 0; j < 20; j++) { System.out.println("main thread sequence of "+j+" loop of"+i); } step=2; con2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int i){ lock.lock(); try { while(step!=2) con2.await(); for (int j = 0; j < 10; j++) { System.out.println("Sub2 thread sequence of "+j+" loop of"+i); } step=3; con3.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try { while(step!=3) con3.await(); for (int j = 0; j < 20; j++) { System.out.println("Sub3 thread sequence of "+j+" loop of"+i); } step=1; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 998public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 986import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1008//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1823更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 815import java.util.Random; i ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1172import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3892import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1022import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1840Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1004/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2230package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1987PO(persistant object) 持久 ...
相关推荐
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...
本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...
虽然示例中未直接涉及,但在实际应用中,线程同步可能导致死锁(两个或多个线程相互等待对方释放资源导致的僵局)或活锁(线程不断重试导致的无法前进状态)。避免这些情况通常需要谨慎设计同步策略,如使用超时、...
Java TCP多线程通信是网络编程中的一个重要概念,它结合了Java的Socket编程与多线程技术,使得多个客户端能够同时与服务器进行交互。在Java中,TCP(传输控制协议)提供了一种可靠的数据传输方式,确保数据的有序、...
Java提供了synchronized关键字来实现方法或代码块的同步,防止多个线程同时访问同一块代码。 9.7 在同步方法中使用wait(), notify和notifyAll(): 这些方法用于线程间通信。wait()使当前线程进入等待状态,直到收到...
使用Java多线程技术,可以在服务器端创建一个主线程,负责接收来自客户端的连接请求,并为每一个请求创建一个新的线程来处理客户端与服务器之间的通信。这样,服务器就可以同时处理多个客户端的请求,提高系统效率。...
2. **易于调试**:单线程程序的调试相对容易,因为不存在多个线程之间复杂的交互情况。 3. **资源消耗少**:单线程程序创建和切换线程的开销较小,对于资源有限的环境更为友好。 然而,单线程也有其局限性: 1. **...
在Java多线程编程中,线程间的通信是非常重要的概念,用于协调多个并发执行的任务。线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口(ReentrantLock、ReentrantReadWriteLock)以及Semaphore信号量。synchronized用于方法或...
在多线程环境下,如果一个变量被多个线程共享且只进行读写操作,可以使用volatile保证数据的一致性。 9. sleep(), yield(), interrupt(): - sleep()方法使当前线程暂停指定的时间,然后继续执行。 - yield()方法...
1. **线程的基本概念**:线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。Java通过`Thread`类和`Runnable`接口来创建和管理线程。每个线程都有自己的生命周期,包括新建、就绪、运行、阻塞和结束五个...
本文将探讨线程间通信的概念,分析基于Java的多线程程序的关键技术,并指出设计多线程程序时需要充分理解线程同步机制以及操作系统进程之间的关系,以便优化程序性能。 关键词:多线程、同步 在当前大多数操作系统...
Java多线程通信机制是Java程序设计中的一个复杂技术,涉及到多个线程之间的通信和协作。多线程是一种程序运行机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,彼此间互相独立。 多线程之间的...
Java多线程同步是Java编程中关键的并发概念,它涉及到如何在多个线程访问共享资源时保持数据的一致性和完整性。`java.util.concurrent`包是Java提供的一个强大的并发工具库,它为开发者提供了多种线程安全的工具,...
为了实现真正的并发,我们需要使用更复杂的同步机制,如线程同步或线程间通信。 接着,我们来看如何在Java中实现多线程。有两种主要方式:继承`Thread`类和实现`Runnable`接口。 1. **继承Thread类**: 当一个类...
在大型系统开发中,多线程技术使得程序能够同时执行多个任务,提高系统的并发性,而同步机制则确保了在多线程环境下数据的一致性和完整性。下面将对这两个关键知识点进行深入解析。 一、Java多线程 1. **线程创建...
3. **线程同步与并发控制**:论文会深入讲解JAVA中的线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和ReentrantLock类的使用。此外,可能会探讨并发工具类,如Semaphore、...
同步线程则是指通过特定机制(如锁)来控制多个线程访问共享资源的顺序,避免出现竞态条件和死锁。 在Java中,线程的创建可以通过继承`Thread`类或实现`Runnable`接口。线程的主体行为定义在`run()`方法中,当`...
然而,当多个线程需要共享资源或按照特定顺序执行时,就需要进行线程同步。 1. **synchronized**:在Java中,`synchronized`关键字用于提供互斥访问,确保同一时间只有一个线程可以访问特定的代码块。例如,可以...