synchronized:线程同步方法使用总结
来源:互联网 发布:3668usb2.0端口驱动 编辑:程序博客网 时间:2024/05/20 08:45
synchronized:
1.多线程执行同一对象的synchronized函数,线程同步正确;
实例代码如下:
public class Test1 implements Runnable{
//定义同一对象
static Test2 action;
public static void main(String[] args) {
// TODO Auto-generated method stub
Class cls;
try {
cls = Class.forName("Test2");
action = (Test2) cls.newInstance();
Test1 t1 = new Test1();
for (int i=0;i<1;i++){
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
// TODO Auto-generated method stub
try {
action.getRandomString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class Test2 {
public static void main(String[] args) {
}
//调用同一对象的synchronized 函数,无需加statci修饰
public synchronized void getRandomString() throws InterruptedException {
System.out.println("$$$$$$$$$$$$$$$$$$");
Thread.sleep(1000);
Random random = new Random();
int aa = random.nextInt(10);
int bb = random.nextInt(10);
int cc = random.nextInt(10);
System.out.println(String.valueOf(aa)+String.valueOf(bb)+String.valueOf(cc));
System.out.println("############");
}
}
=====================================================
=====================================================
2.多线程执行不同对象的synchronized函数,线程同步错误;
实例代码如下:
public class Test1 implements Runnable{
public static void main(String[] args) {
try {
Test1 t1 = new Test1();
for (int i=0;i<100;i++){
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
// TODO Auto-generated method stub
Class cls;
try {
cls = Class.forName("Test2");
Test2 action = (Test2) cls.newInstance();
action.getRandomString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class Test2 {
public static void main(String[] args) {
}
/**
* @param args
* @throws InterruptedException
*/
//调用不同对象的synchronized 函数,需要加statci修饰,否则线程同步失败
public synchronized void getRandomString() throws InterruptedException {
System.out.println("$$$$$$$$$$$$$$$$$$");
Thread.sleep(1000);
Random random = new Random();
int aa = random.nextInt(10);
int bb = random.nextInt(10);
int cc = random.nextInt(10);
System.out.println(String.valueOf(aa)+String.valueOf(bb)+String.valueOf(cc));
System.out.println("############");
}
}
====================================================
=====================================================
3.多线程执行不同对象的synchronized static 函数,线程同步正确;
实例代码如下:
public class Test1 implements Runnable{
public static void main(String[] args) {
try {
Test1 t1 = new Test1();
for (int i=0;i<100;i++){
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
new Thread(t1).start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
// TODO Auto-generated method stub
Class cls;
try {
cls = Class.forName("Test2");
Test2 action = (Test2) cls.newInstance();
action.getRandomString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class Test2 {
public static void main(String[] args) {
}
/**
* @param args
* @throws InterruptedException
*/
//调用不同对象的synchronized 函数,需要加statci修饰,否则线程同步失败
public synchronized static void getRandomString() throws InterruptedException {
System.out.println("$$$$$$$$$$$$$$$$$$");
Thread.sleep(1000);
Random random = new Random();
int aa = random.nextInt(10);
int bb = random.nextInt(10);
int cc = random.nextInt(10);
System.out.println(String.valueOf(aa)+String.valueOf(bb)+String.valueOf(cc));
System.out.println("############");
}
}
=========================================================
==========================================================
- synchronized:线程同步方法使用总结
- 线程同步总结--synchronized方法和synchronized代码块
- 线程同步 synchronized关键字使用
- 使用synchronized块同步方法..
- 使用Synchronized块同步方法
- 使用Synchronized块同步方法
- 使用Synchronized块同步方法
- 使用synchronized实现同步方法
- 使用synchronized实现同步方法
- 2.1使用synchronized同步方法
- 线程同步相关知识,synchronized方法注意事项
- synchronized 线程同步的三种方法
- 如何使用java synchronized进行线程同步
- 使用synchronized进行Java线程同步
- 使用java中的 synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- 如何使用java synchronized进行线程同步
- Entity Framework 5.0系列之自动生成Code First代码
- javascript深度克隆
- android绘图网格线
- 2014鞍山现场赛 HDU5071(模拟)
- 面试珠玑 微软面试题小汇
- synchronized:线程同步方法使用总结
- jquer mobile关于查找替换修改span style样式问题
- C++学习 C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- PHP截取各种编码的汉字字符串
- 字符编码那些事儿(UTF-8,GBK,Unicode,ASCII)(二)
- java的数据类型
- 基于hadoop搜索引擎实践——生成倒排表文件(三)
- java学习--java回收机制
- 广告点击率预估中的特征选择