网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

java的线程安全四种方式五个等级


发布日期:2023年08月21日
 
java的线程安全四种方式五个等级

四种方式 sychronized关键字

sychronized method(){}

sychronized (objectReference) {/*block*/}

static synchronized method(){}

sychronized(classnameclass)

其中是代表锁当前对象即一个对象就一个锁代表锁这个类即这个类的锁

要注意的是sychronized method()不是锁这个函数而是锁对象如果这个类中有两个方法都是sychronized那么只要有两个线程共享一个该类的reference每个调用这两个方法之一不管是否同一个方法都会用这个对象锁进行同步锁类的类推即该类的不同reference调用了sychronized区段的咚咚就会受类锁的控制

还有如果两个函数调用的先后顺序不能被打断那么可以有个专门的锁对象来完成这个任务

class MyLock

{

synchronized getLock()

{

//####还没写完

}

}

五个等级 参见effective javaItem Document thread safety

immutable 不可变对象

threadsafe 线程安全的可以放心使用如javautilTimer

conditionally threadsafe 条件线程安全的如Vector和Hashtable一般是安全的除非存在几个方法调用之间的顺序不能被打断这时可以用额外的锁来完成

threadcompatible 可以使用synchronized (objectReference)来协助完成对线程的调用

threadhostile 不安全的

wait & notifyAll

在循环中使用wait 使用notifyAll而不是notify

pipe

java中也有pipe的四个类PipedInputStream PipedInputReader PipedOutputStream PipedOutputWriter 下面是一段生产者消费者的代码(摘自core javaII)

/* set up pipes */

PipedOutputStream pout = new PipedOutputStream();

PipedInputStream pin = new PipedInputStream(pout);

PipedOutputStream pout = new PipedOutputStream();

PipedInputStream pin = new PipedInputStream(pout);

/* construct threads */

Producer prod = new Producer(pout);

Filter filt = new Filter(pin pout);

Consumer cons = new Consumer(pin);

/* start threads */

prodstart(); filtstart(); consstart();

上一篇:基于服务器的Java安全产品

下一篇:您的Java代码安全吗—还是暴露在外?