多线程的基础概念和使用
作者:互联网
首先需要明白线程和进程的区别,线程是比进程更小的单位,一个进程由多个线程组成,并且进程之间不能实现资源或者信息共享,平时电脑用到的软件都是一个个进程,例如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中的加锁代码块
运行的结果中没有出现资源被抢占的情况,每个车票都分给了不同的线程,没有重复抢到同一张车票的情况。
标签:加锁,java,Thread,基础,demo03,概念,线程,new,多线程 来源: https://blog.csdn.net/weixin_45126325/article/details/119081952