多线程的基础概念和使用

首先需要明白线程和进程的区别,线程是比进程更小的单位,一个进程由多个线程组成,并且进程之间不能实现资源或者信息共享,平时电脑用到的软件都是一个个进程,例如qq音乐和网易云,他们都是音乐软件,但是他们不能实现信息共享,他们是独立的,而线程可以实现资源共享,多个线程可以共用同一个资源,例如聊天软件,可以打开多个聊天窗口,和多个聊天对话,他们都来自聊天软件的进程,然后又开启了多个线程。

在java中,线程通过继承Thread类或者创建Thread对象使用,每创建一个Thread对象就是创建一个线程,当多个线程同时访问一个资源时会出现不安全的情况,所用java中使用到了锁,通过synchronized代码块或者带synchronized的方法进行加锁,保证同一时间只有一个线程可以访问被加锁的资源,java中还可以使用Lock类保证线程安全,使用类中的lock方法和unlock方法,可以加锁和释放锁,保证资源的安全性。

下面用代码演示一下没有锁的情况下,多线程怎么抢占资源的,以最经典的抢票模式

public class demo03 implements Runnable{
    int num=5000;
    @Override
    public void run() {
        while (num>0){
            /*synchronized ("") {*/
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+"\t车票剩余" + num-- + "张");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
           /* }*/
        }
    }

    public static void main(String[] args) {
        demo03 demo03=new demo03();
        Thread t1=new Thread(demo03,"12306上卖了一张");
        Thread t2=new Thread(demo03,"携程无忧上卖了一张");
        Thread t3=new Thread(demo03,"车站上卖了一张");
        t3.setPriority(10);
        t1.start();
        t2.start();
        t3.start();
    }
}

这就出现了多线程抢占资源的情况,加锁后就不会出现,如下图为java中的加锁代码块

多线程的基础概念和使用

运行的结果中没有出现资源被抢占的情况,每个车票都分给了不同的线程,没有重复抢到同一张车票的情况。

 多线程的基础概念和使用

 

 

上一篇:【Gerrit】重磅! 2.x 版本升级到 3.x 版本


下一篇:com.xu.operator.Demo03