Java多线程常用的几个关键字
本文是本站小编搜索整理的关于Java多线程常用的几个关键字,供参考借鉴,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!
一、同步(synchronized)和异步(asynchronized)
1、同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没必要进行同步。设置共享资源为同步的话,可以避免一些脏读情况。
2、异步(asynchronized)简单说可以理解为独立不受到其他任何制约。
举个例子:
线程1调用了带有synchronized关键字的方法methodA,线程2调用了异步方法methodB,出现的现象是同时控制台输出 t1,t2。
package ;
/**
* 多线程之对象同步锁和异步锁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() {
odA();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
odB();
}
},"t2");
t();
t();
}
// 方法A
public synchronized void methodA(){
try {
tln(entThread()ame());
// 休眠4秒
p(4000);
} catch (InterruptedException e) {
tStackTrace();
}
}
// 方法B
public void methodB(){
tln(entThread()ame());
}
}
线程1调用了带有synchronized关键字的方法methodA,线程2调用了带有synchronized关键字的方法methodB,出现的.现象是首先输出t1,等待4秒之后再输出t2。
package ;
/**
* 多线程之对象同步锁和异步锁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() {
odA();
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
odB();
}
},"t2");
t();
t();
}
// 方法A
public synchronized void methodA(){
try {
tln(entThread()ame());
// 休眠4秒
p(4000);
} catch (InterruptedException e) {
tStackTrace();
}
}
// 方法B
public synchronized void methodB(){
tln(entThread()ame());
}
}
结论:
在第一段代码中t1线程先持有object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法,所以同时输出;
在第二段代码中t1线程先持有object对象的Lock锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步。
-
10个经典的Java main方法面试题
Java具有简单性、面向对象、分布式、健壮性、安全性、平台的独立与可移植性、多线程、动态性等特点。以下是为大家分享的10个经典的Javamain方法面试题,供大家参考借鉴,欢迎浏览!1.不用main方法如何定义一个类?不行,没有main方法我们不能运行Java类。在Java7之前,...
-
Java发展史之Java的由来
Java发展史之Java的由来Java:由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发,它最初被命名为...
-
初学java编程入门必备的知识
基础知识是新手学习一门新技术的必须掌握的,下面内容由小编为大家介绍初学java编程入门必备的知识,供大家参考!01、Java编程出现的背景1991年Sun公司的JamesGosling等人开始开发名称为Oak的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器,但却没有取得...
-
2017上半年计算机二级Java备考练习题及答案
练习做多了自然会形成自己的做题方法和速度,为此,今天本站小编为大家整理了以下2017上半年计算机二级Java备考练习题及答案,希望对大家有帮助!练习题一1、以下不是Java中有效的关键字。A、constB、NULLC、falseD、this本题考查的是Java的关键字。Java中常量null,fa...