- 浏览: 1383313 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
/** * TraditionalSynchronized.java * cn.com.songjy.test.socket.thread * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-8-16 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy.test.socket.thread; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * ClassName:TraditionalSynchronized * 传统线程互斥技术 * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-8-16 上午10:22:22 */ public class TraditionalSynchronized { private static Log log = LogFactory.getLog(TraditionalThread.class); public static void main(String[] args) { new TraditionalSynchronized().init(); } private void init() { final OutPuter outPuter = new OutPuter(); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { log.error(e.getMessage(), e); } outPuter.output("abcdefghijk"); } } }).start(); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { log.error(e.getMessage(), e); } outPuter.output1("kjihgfedcba"); } } }).start(); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { log.error(e.getMessage(), e); } OutPuter.output2("123456789"); } } }).start(); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { log.error(e.getMessage(), e); } outPuter.output3("987654321"); } } }).start(); } static class OutPuter { String str = "aa"; public void output(String name) {// 一个一个打印字符串中的字符到控制台,重新组成完整的字符串,若不完整,说明没有同步,线程不安全 int len = name.length(); synchronized (/* str */this) { for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } } /* * 下面的方法与上面的方法output同步 下面注释部分代码不去掉的话容易出现死锁 */ public synchronized void output1(String name) {// 一个一个打印字符串中的字符到控制台,重新组成完整的字符串,若不完整,说明没有同步,线程不安全 int len = name.length(); // synchronized (/*str*/this) { for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); // } } /* * 要在内部类中声明静态方法或成员变量,必须用static修饰内部类 下面的方法与上面的方法output和output1不同步 */ public static synchronized void output2(String name) {// 一个一个打印字符串中的字符到控制台,重新组成完整的字符串,若不完整,说明没有同步,线程不安全 int len = name.length(); for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } /* * 下面的方法与上面的方法output2同步,但与output、output1不同步 * 同步原因是因为不管是静态方法还是非静态方法,都要有一个对象与其关联,而类的字节码 * 在内存中也是一个对象,静态方法在运行的时候虽不需要创建类的实例对象,但字节码已在内存中了 */ public void output3(String name) {// 一个一个打印字符串中的字符到控制台,重新组成完整的字符串,若不完整,说明没有同步,线程不安全 int len = name.length(); synchronized (/* str */OutPuter.class) { for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } } } } /* * 备注: * * 一、静态方法不能访问内部类的实例对象,即无法在静态方法创建内部类的实例 * * 二、内部类可以访问外部类的成员变量,这就意味着外部类必须实例化才能为自己的成员变量分配空间 * * 三、要想创建内部类的实例对象,必须要有外部类的实例对象,所以可以在外部类中创建非静态成员方法,在此方法中就可以创建内部类的实例,但要想访问内部类的成员变量, * 必须用final修饰创建的内部类 */
引自:http://down.51cto.com/data/443410
发表评论
-
java.io.NotSerializableException: java.util.ArrayList$SubList
2016-03-15 11:36 2884错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1270在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 686错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 895一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19592看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1162项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1602/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3728package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3602一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 802Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1105package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1054package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2489项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4112package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 713package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 824package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1099package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1373package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1401/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 972/** * LockTest.java * cn.co ...
相关推荐
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...
本文将深入探讨标题和描述中提到的“多线程的小例子”以及线程互斥的概念。 线程互斥是多线程编程中的一个关键概念,用于确保在特定时间内,只有一个线程可以访问共享资源,以防止数据不一致性和竞态条件。在C#中,...
张孝祥老师的课程"传智播客_张孝祥_传统线程同步通信技术"深入浅出地讲解了这一主题,旨在帮助开发者理解和掌握线程间的协作与数据共享方式。 线程同步是指在多线程环境下,控制多个线程按一定的顺序执行,以避免...
### 三、传统线程互斥技术 #### 3.1 互斥问题 在多线程环境中,多个线程可能同时访问共享资源(如银行账户余额),如果没有适当的控制措施,可能导致数据一致性问题或竞态条件。这种情况下,需要采取措施确保同一...
这个压缩包“C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(0515).rar”包含了六个关于C#中多线程应用的实例,涵盖了从基础到高级的多线程使用场景,如线程创建、线程同步和互斥。...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和优化...学习并理解这些实例,将有助于开发者更好地在C#.NET项目中运用多线程技术,提高程序的性能和效率。
了解并熟练掌握这些传统线程同步通信技术,能帮助你在多线程编程中有效地避免数据竞争,提高程序的并发性和可靠性。在实际开发中,应根据具体需求选择最合适的同步机制,同时考虑线程同步带来的开销,以实现最佳性能...
本文将深入探讨传统线程同步通信技术,主要包括临界区、信号量、互斥量以及事件对象。 1. **临界区**(Critical Section) 临界区是程序中用于访问共享资源的代码段。为了防止多个线程同时进入临界区,我们可以...
传统线程互斥技术 - 线程间的互斥通常通过`synchronized`关键字或显式锁(`Lock`)来实现。 ##### 4. 传统线程同步通信技术 - 线程之间的同步通信可以通过`wait()`、`notify()`和`notifyAll()`等方法来实现。 #####...
在C++编程中,多线程技术是一种关键的并发处理机制,它允许程序同时执行多个独立的任务,从而提高系统的效率和响应性。本综合技术篇将深入探讨C++中的多线程概念、实现方法以及常见问题。 一、线程基础 线程是操作...
【Linux线程技术】在操作系统领域,Linux线程是指在Linux环境下实现的多线程编程技术。虽然在早期的Linux内核中并没有直接支持线程的概念,而是通过轻量级进程(Lightweight Process, LWP)来模拟线程的行为。在...
为了更高效地管理文件读取与进度更新过程,本篇文章将介绍如何利用线程同步技术中的互斥量(mutex)来实现这一功能。 #### 二、线程与进程基础知识 - **进程**:一个正在执行的应用程序及其资源集合,包括私有的虚拟...
除了传统的多线程,Delphi还支持异步编程模型,如使用IO Completion Ports(IOCP)来处理I/O密集型任务,提高系统吞吐量。IOCP允许系统在I/O操作完成时自动通知线程,避免了不必要的等待和上下文切换。 七、实际...
Java多线程编程技术是Java编程语言中一个非常重要的技术分支,它允许程序员在程序中创建多个执行流(线程),这些线程可以并发执行,从而使得程序能更加高效地利用系统资源,同时提高应用的响应速度和吞吐能力。...
Linux下的多线程不同于传统的进程创建,它通过克隆(`clone`)系统调用来创建线程,这种方法显著降低了CPU开销和内存消耗。克隆出的线程与父进程共享资源,例如文件、信号处理程序和虚拟内存,同时利用“写时复制”...
在Solaris 2.4系统中,多线程编程是一种先进的技术,它允许在一个进程中同时执行多个线程,以提升程序的响应速度、资源利用率和性能。本文将深入探讨多线程的基本概念、优势以及如何利用Solaris提供的工具进行多线程...
传统的同步套接字会在执行I/O操作时阻塞当前线程,直到操作完成,这可能会严重影响程序的响应速度。相比之下,异步套接字则能在数据到达时通过特定机制通知程序,从而使程序无需等待即可继续执行其他任务。 - **...