- 浏览: 1364515 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (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 2785错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1079在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 634错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 853一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19495看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1110项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1552/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3619package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3528一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 754Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1049package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1007package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2370项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4053package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 649package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 757package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1052package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1319package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1355/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 927/** * LockTest.java * cn.co ...
相关推荐
易语言 线程池 多线程 线程互斥 易语言线程互斥的解决办法
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...
g: 利用互斥量来解决线程同步互斥问题 h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore ...
这个多线程例子。C#的。主要讲述线程互斥的问题 。只是个简单的例子。
C 创建线程互斥对象的实例源码下载,声明线程函数,创建线程,程序睡眠,释放互斥对象,设置事件对象为无信号状态,生成控制台程序,仅供参考。
C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子
4个线程互斥类,代码例子,完整的工程,详细说明了4中互斥对象的作用,对学习多线程编程的朋友很有用处............
C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)
C# 多线程互斥 两个线程交替工作 C#多线程互斥,两个线程交替工作,如上图所示,挺有意思的。
线程互斥测试2!
操作系统实验(三)线程的互斥 操作系统实验(三)线程的互斥
多线程中互斥量的使用。 涉及到得知识有:线程的创建、互斥量的创建和使用,线程等待等。
线程的互斥和协作,是线程学习的一个重要关节,祝大家能学好
进程,线程同步互斥的控制方法,详细介绍,个人总结,面试常问
线程 互斥.rar
C++ 创建线程互斥对象的实例源码下载,声明线程函数,创建线程,程序睡眠,释放互斥对象,设置事件对象为无信号状态,生成控制台程序,仅供参考。
vc++中使用临界区CriticalSection的例子.zip
MFC线程互斥!
四种进程或线程同步互斥的控制方法,用c++实现的,很不错的东西,大家共享一下