设为首页 加入收藏

TOP

Java多线程的几个常用关键字(一)
2017-04-14 10:23:27 】 浏览:533
Tags:Java 线程 常用 关键字

一、同步(synchronized)和异步(asynchronized)


1、同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没必要进行同步。设置共享资源为同步的话,可以避免一些脏读情况。


2、异步(asynchronized)简单说可以理解为独立不受到其他任何制约。


举个例子:


线程1调用了带有synchronized关键字的方法methodA,线程2调用了异步方法methodB,出现的现象是同时控制台输出 t1,t2。


package com.ietree.multithread.sync;


/**
 * 多线程之对象同步锁和异步锁Demo
 *
 * @author ietree
 */
public class SynAndAsynDemo {


    public static void main(String[] args) {
       
        final SynAndAsynDemo mo = new SynAndAsynDemo();
       
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                mo.methodA();
            }
        },"t1");
       
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                mo.methodB();
            }
        },"t2");
       
        t1.start();
        t2.start();
    }
   
    // 方法A
    public synchronized void methodA(){
        try {
            System.out.println(Thread.currentThread().getName());
            // 休眠4秒
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
   
    // 方法B
    public void methodB(){
        System.out.println(Thread.currentThread().getName());
    }
   
}


线程1调用了带有synchronized关键字的方法methodA,线程2调用了带有synchronized关键字的方法methodB,出现的现象是首先输出t1,等待4秒之后再输出t2。


package com.ietree.multithread.sync;


/**
 * 多线程之对象同步锁和异步锁Demo
 *
 * @author ietree
 */
public class SynAndAsynDemo {


    public static void main(String[] args) {
       
        final SynAndAsynDemo mo = new SynAndAsynDemo();
       
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                mo.methodA();
            }
        },"t1");
       
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                mo.methodB();
            }
        },"t2");
       
        t1.start();
        t2.start();
    }
   
    // 方法A
    public synchronized void methodA(){
&nbs

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用Python解析JSON详解 下一篇JFinal3.0配置Cron4j任务调度插件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目