java 多线程 线程安全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多线程 线程安全相关的知识,希望对你有一定的参考价值。

技术分享
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * Created by meicai on 2017/3/17.
 */
public class Hello {
    public static void main(String [] args) {
        Ticket ticket=new Ticket();
        Thread t1=new Thread(ticket);
        Thread t2=new Thread(ticket);
        t1.start();
        t2.start();
    }

}

class Ticket implements Runnable{
    private int num=10;
    @Override
    public void run() {
        sale();
    }
    public void sale(){
        while(num>0){
            try {
                Thread.sleep(10);
                System.out.println("卖第"+num+"张票"+Thread.currentThread().getName());
                num--;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
}
不安全的线程

技术分享

如图第6张票被不同的线程卖了,这样就出问题了。

技术分享
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * Created by meicai on 2017/3/17.
 */
public class Hello {
    public static void main(String [] args) {
        Runnable r=new Ticket();
        Thread t1=new Thread(r);
        Thread t2=new Thread(r);
        t1.start();
        t2.start();
    }

}

class Ticket implements Runnable{
    Object obj=new Object();
    private int num=500;
    @Override
    public void run() {
        sale();
    }
    public void sale(){
        //使用同步代码块来防止出现安全问题
        synchronized (obj) {
            while (num > 0) {
                try {
                    Thread.sleep(10);
                    System.out.println("卖第" + num-- + "张票" + Thread.currentThread().getName());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
多线程 使用同步代码库保证安全

同步代码块保证了线程安全,效率低下,(使用了加锁机制)

 

以上是关于java 多线程 线程安全的主要内容,如果未能解决你的问题,请参考以下文章

多线程--线程安全

JAVA多线程_线程安全问题

Java面试题多线程-线程安全

怎样去写线程安全的代码(Java)

怎样去写线程安全的代码(Java)

java中多线程安全性和同步的常用方法