首页 / JAVA / java并发编程实战
java并发编程实战
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java并发编程实战,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2612字,纯文字阅读大概需要4分钟。
内容图文
![java并发编程实战](/upload/InfoBanner/zyjiaocheng/617/5cc9a4b25fcf4bbeb23dcbac1725af81.jpg)
文章目录
并发的基本概念
重入锁
一个钥匙和很多一样的锁。
原理:
重入锁保护方法A、方法B
方法A调用方法B可以成功。
重入锁有计数器,被获取一次钥匙就+1,变为0就释放锁。
耗时较长的地方不用锁,如IO,长时间计算的地方
package net.jcip.examples;
import java.math.BigInteger;
import javax.servlet.*;
import net.jcip.annotations.*;
/**
* CachedFactorizer
* <p/>
* Servlet that caches its last request and result
*
* @author Brian Goetz and Tim Peierls
*/
@ThreadSafe
public class CachedFactorizer extends GenericServlet implements Servlet {
@GuardedBy("this") private BigInteger lastNumber;
@GuardedBy("this") private BigInteger[] lastFactors;
@GuardedBy("this") private long hits;
@GuardedBy("this") private long cacheHits;
public synchronized long getHits() {
return hits;
}
public synchronized double getCacheHitRatio() {
return (double) cacheHits / (double) hits;
}
public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = null;
synchronized (this) {
++hits;
if (i.equals(lastNumber)) {
++cacheHits;
factors = lastFactors.clone();
}
}
if (factors == null) {
factors = factor(i);//耗时较长
synchronized (this) {
lastNumber = i;
lastFactors = factors.clone();
}
}
encodeIntoResponse(resp, factors);
}
void encodeIntoResponse(ServletResponse resp, BigInteger[] factors) {
}
BigInteger extractFromRequest(ServletRequest req) {
return new BigInteger("7");
}
BigInteger[] factor(BigInteger i) {
// Doesn't really factor
return new BigInteger[]{i};
}
}
条件变量
情景:当线程A获取锁,并进入方法后,发现因条件C不足,无法进行下去。
把当前线程用条件变量C管理:
- 进入条件集等待被唤醒
- 并释放锁
线程B发现,A可能满足条件C:
- 唤醒条件集等待的线程
- 释放锁
synchronized内部锁
每个对象都有一个隐式的锁,类也有隐式的锁。synchronized修饰的方法就利用了内部锁。
volatile
修饰的变量
- 不提供原子性。
- 对读取这个变量的其他线程都可见。
ThreadLocal线程局部变量
不在线程间共享变量,而是给每个线程提供一个实例。
创建线程
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
睡眠 Thread.sleep
public class SleepMessages {
public static void main(String args[])
throws InterruptedException {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
for (int i = 0;
i < importantInfo.length;
i++) {
//Pause for 4 seconds
Thread.sleep(4000);
//Print a message
System.out.println(importantInfo[i]);
}
}
}
中断
内容总结
以上是互联网集市为您收集整理的java并发编程实战全部内容,希望文章能够帮你解决java并发编程实战所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。