您的位置:首页 > 编程语言 > Java开发

java 线程安全 线程同步 线程同步机制

2017-03-29 22:25 309 查看
第一种:普通的情况演示

package com.js;
// 线程安全问题来源于两个线程同时存取单一对象的数据
public class Java_4_Thread_SafeTest implements Runnable {
int num = 10;
public void run(){
while(true){
if(num > 0){
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("tickets"+num--);
}
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Java_4_Thread_SafeTest t = new Java_4_Thread_SafeTest();// 实例化类对象
Thread tA = new Thread(t);
Thread tC = new Thread(t);
Thread tD = new Thread(t);
Thread tB = new Thread(t);

tA.start();
tB.start();
tC.start();
tD.start();
}

}


线程同步方式1:同步块

package com.js;

public class Java_4_Thread_SafeTestSynchronizedBlock implements Runnable {

int num = 10;
public void run(){
while(true){
synchronized(""){
if(num > 0){
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("tickets"+num--);
}
}

}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Java_4_Thread_SafeTestSynchronizedBlock t = new Java_4_Thread_SafeTestSynchronizedBlock();// 实例化类对象
Thread tA = new Thread(t);
Thread tC = new Thread(t);
Thread tD = new Thread(t);
Thread tB = new Thread(t);

tA.start();
tB.start();
tC.start();
tD.start();
}

}


线程同步方式2:同步方法

package com.js;

public class Java_4_Thread_SafeTestSynchronizedMethod implements Runnable {

int num = 10;
public synchronized void doit(){
if(num > 0){
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("tickets"+num--);
}
}
public void run(){
while(true){
doit();
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Java_4_Thread_SafeTestSynchronizedMethod t = new Java_4_Thread_SafeTestSynchronizedMethod();// 实例化类对象
Thread tA = new Thread(t);
Thread tC = new Thread(t);
Thread tD = new Thread(t);
Thread tB = new Thread(t);

tA.start();
tB.start();
tC.start();
tD.start();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息