Java基础_线程_多线程
来源:互联网 发布:炫浪网络社区下载 编辑:程序博客网 时间:2024/05/31 13:14
六、线程的同步
snchronized执行这个方法的过程中当前对象被锁定
在Java语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记保证在任意时刻,只能有一个线程访问该对象。
关键字synchronized来与对象的互斥锁联系。当某个对象被synchronized修饰时,表名该对象在任一时刻只能由一个线程访问。
publicclassSynchronizedTestimplements Runnable {
Timer t = new Timer();
publicstaticvoid main(String[] args) {
SynchronizedTest sync = new SynchronizedTest();
Thread t1 = newThread(sync);
Thread t2 = newThread(sync);
t1.setName("thread1");
t2.setName("thread2");
t1.start();
t2.start();
/* 因为首先将count++,所以第一个线程调用add方法,将count自加为1,并进行睡眠
* 之后第二个线程调用add方法,将count自加为2,并进行睡眠
* 这也就造成了最后输出的时候,结果两个线程打印的语句count都为2
* thread1你是第2调用该线程的!
thread2你是第2调用该线程的!
*/
}
publicvoid run(){
t.add(Thread.currentThread().getName());
}
}
class Timer {
privatestaticintcount = 0;
publicvoidadd(String threadName) {
count++;
try {
Thread.sleep(1000);//这里睡眠1秒钟,是为了让输出更明显,如果不睡眠实际中也会出现这种情况
} catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadName+"你是第" +count +"调用该线程的!");
}
}
这样的结果并不是我们期望看到的,如果期望达到预期的效果可以使用synchronized。
publicclassSynchronizedTest2implements Runnable {
Timer2 t = new Timer2();
publicstaticvoid main(String[] args) {
SynchronizedTest2 sync =new SynchronizedTest2();
Thread t1 = newThread(sync);
Thread t2 = newThread(sync);
t1.setName("thread1");
t2.setName("thread2");
t1.start();
t2.start();
}
publicvoidrun() {
t.add(Thread.currentThread().getName());
}
}
class Timer2 {
privatestaticintcount = 0;
publicsynchronizedvoid add(String threadName) {
// synchronized(this) {
count++;
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadName+"你是第" +count +"调用该线程的!");
// }
}
}
- Java基础_线程_多线程
- Java基础_线程_多线程_死锁
- Java基础_线程_多线程_生产者消费者问题
- Java基础_多线程
- Java基础_多线程
- java基础_多线程
- Java多线程_基础
- Java基础_线程
- Java基础<七>_多线程
- 六.Java基础_多线程
- java基础24_多线程
- JAVA基础_多线程、锁
- Java 回顾笔记_多线程_线程通讯1
- Java 回顾笔记_多线程_线程通讯2
- 多线程_线程同步
- 多线程_线程简介
- 黑马程序员_毕向东JAVA基础_多线程
- java基础学习笔记_多线程
- MIT OS 4. printf vsprint fprintf 格式化输出 @ Lab1
- 教你在Joomla正文中插入google廣告、圖片廣告
- 关于引用的指向的 问题小解
- MIDlet-Jar说明
- dedecms添加二级域名设置问题
- Java基础_线程_多线程
- 启动JBoss出现“java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils”解决
- 在线考试系统设计时必须考虑的问题之四---------综合参数设置问题
- MyEclipse插件开发-在当前代码中增加main函数的插件
- OpenCV运动目标检测
- 遇到从剩下的东西挑选排列的问题,真是笨死了
- android Handler使用
- linux启动tomcat报:The BASEDIR environment variable is not defined correctly
- 完全PHP5之session篇