1.synchronized关键字

/**
* 同步关键字
* @author tomsnail
* @date 2015年4月18日 下午12:12:39
*/
public class SyncThreadTest { private static final byte[] lock = new byte[1]; /**
* 同步方法
* @author tomsnail
* @date 2015年4月18日 下午12:15:30
*/
public synchronized void test1(){ } /**
* 同步块
* @author tomsnail
* @date 2015年4月18日 下午12:15:17
*/
public void test2(){
synchronized (lock) { }
} }

2.volatile关键字

/**
* volatile关键字
* @author tomsnail
* @date 2015年4月18日 下午12:21:58
*/
public class VolatileThreadTest { private volatile int count = 100; public void add(int number){
count+=number;
} public int getCount(){
return count;
}
}

3.Lock锁

/**
* lock锁
* @author tomsnail
* @date 2015年4月18日 下午12:58:49
*/
public class LockThreadTest { private Lock lock = new ReentrantLock(); private int count = 100; public void test(){
lock.lock();
count++;
System.out.println(count);
lock.unlock();
} }

4.Mutex信号量

/**
* 线程信号量
* @author tomsnail
* @date 2015年4月18日 下午1:14:47
*/
public class MutexThreadTest { private CountDownLatch countDownLatch = new CountDownLatch(1); private Semaphore s = new Semaphore(5); public void a(){
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
} public void b(){
countDownLatch.countDown();
} public void c(){
try {
System.out.println(" try acquire s");
s.acquire();
System.out.println(" acquire s");
} catch (InterruptedException e) {
e.printStackTrace();
}
} public void d(){
s.release();
System.out.println(" release s");
} public static void main(String[] args) {
MutexThreadTest mutexThreadTest = new MutexThreadTest();
for(int i=0;i<10;i++){
new Thread(new ThreadTest(mutexThreadTest)).start();
}
mutexThreadTest.a();
System.out.println("a...");
for(int i=0;i<10;i++){
new Thread(new ThreadTest2(mutexThreadTest)).start();
} } }
class ThreadTest implements Runnable{ private MutexThreadTest mutexThreadTest; public ThreadTest(MutexThreadTest mutexThreadTest){
this.mutexThreadTest = mutexThreadTest;
} @Override
public void run() {
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("mutexThreadTest countDown");
mutexThreadTest.b();
} } class ThreadTest2 implements Runnable{ private MutexThreadTest mutexThreadTest; public ThreadTest2(MutexThreadTest mutexThreadTest){
this.mutexThreadTest = mutexThreadTest;
} @Override
public void run() {
mutexThreadTest.c();
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mutexThreadTest.d();
} }

重学JAVA基础(六):多线程的同步的更多相关文章

  1. 重学JAVA基础(八):锁的基本知识

    1.线程状态 如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态.这个过程 ...

  2. 重学JAVA基础(五):面向对象

    1.封装 import java.util.Date; public class Human { protected String name; protected BirthDay birthDay; ...

  3. 重学JAVA基础(二):Java反射

        看一下百度的解释:       JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息     ...

  4. 重学JAVA基础(一):PATH和CLASSPATH

    我想大多数Java初学者都会遇到的问题,那就是怎么配置环境,执行java -jar xxx.jar  都会报NoClassDefFindError,我在最开始学习的时候,也遇到了这些问题. 1.PAT ...

  5. 重学JAVA基础(七):线程的wait、notify、notifyAll、sleep

    /** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20: ...

  6. 重学JAVA基础(四):线程的创建与执行

    1.继承Thread public class TestThread extends Thread{ public void run(){ System.out.println(Thread.curr ...

  7. 重学JAVA基础(三):动态代理

    1.接口 public interface Hello { public void sayHello(); } 2.实例类 public class Hello2 { public void sayH ...

  8. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  9. 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 程序员‍‍的上下文是什么? 很多时候一大部分编程开发的人员都只是关注于功能的实现,只 ...

随机推荐

  1. Boo who

    function boo(bool) { // What is the new fad diet for ghost developers? The Boolean. //return bool; r ...

  2. weblogic myeclipse小知识

    新建域 http://jingyan.baidu.com/article/f7ff0bfc72904e2e27bb136f.html svn 上down下来一些新项目的时候没法添加到weblogic ...

  3. mfc中Button、Edit Control和MFC EditBrowse Control的用法

    [前(fei)言(hua)] 写LL(1)分析器被CString转string卡了一个多小时也是醉了. 趁着还算清醒写下这次用到的控件的使用方法好了. 这次实验的mfc用到了四个控件:Edit Con ...

  4. 基本数据类型范围大小&&字节大小

    char -128 ~ +127 short -32767 ~ + 32768 unsigned short 0 ~ 65536 int -2147483648 ~ +2147483647 unsig ...

  5. php基础-转义字符

    1.php是弱类型语言,定义变量时无需要定义 2.标量类型:整形.浮点型.字符串类型.布尔型 复合类型:数组.对象 其它类型:资源类型(resource如数据库连接,打开文件句柄,资源在不需要时都要释 ...

  6. Daily Scrum 12.4

    今日完成任务: 对数据库完成了整理,以下是整理的内容: # 表 改动 原因 1 Answer 保留credit列,作为投票数 建议改名为vote,同意?   2 Answer qid.uid设置为外码 ...

  7. 重写,重载,super,this,继承

    重写:overwrite/override 子类根据需要对从基类继承来的方法进行重写. 重写方法必须与被重写方法有相同的方法名,参数列表和返回类型. 重写方法不能使用比被重写方法更严格的访问权限. 重 ...

  8. github的一些指令

  9. <大学祭>

    我将20岁青涩的身影留在教室前的花坛边,远赴他乡,这些年过去了,他总是对我说别忘记我的梦: 我将那个沉静娇小的眼镜女孩印象留在第一排靠窗的座位,带着淡淡离愁而去,这些年过去了,她对我说,永恒的爱是心中 ...

  10. js-DOM-页面元素的兼容性、常用事件、节点

    页面元素的兼容性: 所谓的兼容性指的就是当前浏览器是否支持当前对象的属性或是方法,如果支持就是兼容,如果不支持就是不兼容. 举个例子: /** * 设置页面标签之间的文本内容的兼容性写法 * @par ...