jackyxio

初步认识JAVA(四)-互斥

时间还过的真快呀,转眼就过了一年了。接触JAVA也快二年了,当初写BLOG的初衷也忘记了。今天突然想起,写下一篇吧。

多线程是服务端程序用的最多的技术,为了让多线程有序的访问共同资源,就必须在访问先查询资源是否可以访问,因此就产生了互斥。JAVA的互斥使用synchronized关键字来实现的,在使用上有二种方法,下面给出例子。

1.声明变量或函数在同一对象内可进行互斥

class TestClass
{
public byte[] m_Test = new byte[1];
public synchronized void Test()
{
//函数中的代码在互斥效果内
}

public void Test1()
{
synchronized(m_Test)
{
//段中的代码在互斥效果内
}
}
}

TestClass t = new TestClass();
所有的线程在使用t对象时,对t内的synchronized(m_Test)块和Test函数访问产生互斥作用。

2.声明变量或函数在同一个进程内可进行互斥
class TestClass
{
public static byte[] m_Test = new byte[1];
public static synchronized void Test()
{
//函数中的代码在互斥效果内
}

public void Test1()
{
synchronized(m_Test)
{
//段中的代码在互斥效果内
}
}
}

TestClass t = new TestClass();
TestClass t1 = new TestClass();
所有的线程在使用t和t1对象时,对synchronized(m_Test)块和Test函数访问均产生互斥作用,同时只存在一个线程访问。

仔细看一下,方法2比方法1,就是在声明的时候将变量或函数声明成静态的,除此以外并无差别。但是功能却天差地远。

posted on 2007-07-10 01:04 jacky的无聊空间 阅读(741) 评论(1)  编辑 收藏 引用 所属分类: JAVA

Feedback

# re: 初步认识JAVA(四)-互斥 2008-08-15 17:13 说法是否

垃圾  回复  更多评论   


只有注册用户登录后才能发表评论。