黑马程序员技术交流社区
标题:
关于线程安全的问题
[打印本页]
作者:
贺洪京
时间:
2011-9-17 17:11
标题:
关于线程安全的问题
麻烦各位帮忙解释一下,在线程安全问题中有一个线程同步函数和线程同步代码块Synchronized 但是两者有什么区别啊?在什么时候用函数,什么时候用代码块呢?
作者:
匿名
时间:
2011-9-17 17:31
标题:
回复 楼主 的帖子
synchronized是解决线程互斥问题的,当他们指向同一个对象时,那个对象才能实现线程互斥。
而你说的线程同步函数是个什么东东,这个我想请教一下楼主。
作者:
匿名
时间:
2011-9-17 17:41
线程同步函数就是在普通的函数前边加上synchronized,他和同步代码块是一样的也是当他们指向同一个对象时,来进行的线程互拆,就是下面例子中的sale() 函数那样,但是我就是搞不清楚两个到底有什么区别?
package com.qmxy.lesson9;
public class ThreadDome1 {
public static void main(String[] args) {
TestThread tt=new TestThread();
new Thread(tt).start();
try{Thread.sleep(1);}catch(Exception e){}
tt.st=new String("modth");
new Thread(tt).start();
}
}
class TestThread implements Runnable{
int tick=100;
String st=new String("");
public void run(){
if(st.equals("modth"))
{
while(true){
sale();}
}
else
synchronized(this){
if(tick>0)
{try{Thread.sleep(10);}catch(Exception e){
e.getMessage();
}
System.out.println(Thread.currentThread().getName()+"is slaing tickets...."+tick--);}}
}
public synchronized void sale(){
if(tick>0)
{try{Thread.sleep(10);}catch(Exception e){
e.getMessage();
}
System.out.println("sale()");
System.out.println(Thread.currentThread().getName()+"is slaing tickets...."+tick--);}}
}
作者:
程辰
时间:
2011-9-17 17:48
这两个synchronized都指向了TestThread这个类,所以sele()这个方法和synchronized(this){
if(tick>0)
{try{Thread.sleep(10);}catch(Exception e){
e.getMessage();
}
System.out.println(Thread.currentThread().getName()+"is slaing tickets...."+tick--);}}
}
是互斥的。
只不过一个是代码块,一个是关键字而已。就像static 代码块和 static关键字一样。如果很多变量都有同一个关键字,那么就可以将这个关键字抽出来变成一个关键字的代码块。
[
本帖最后由 程辰 于 2011-09-17 17:50 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2