纯小白,所以我们这里只讲三种创建线程的方式,忽略线程池。
如果出错,多多指教。
首先我们了解一些基本名词。
程序:就是一段静态的代码
进程:正在运行的一个程序
线程:进程可进一步细化为线程
多线程的优点:
1,提高程序的响应,增强用户体验;
2,提高计算机系统CPU的利用率
3,改善程序结构
忽略线程池的三种创建线程的方式:
1,继承Thread类
2.实现Runnable接口
3,实现Callable接口
Thread常见的方法如下
另外俩种方式,也是跟这个类的套娃,所有我们一定要熟悉这些方法。
注意:
所有的线程的创建我们都以经典的三个窗口买一百张票举例
1.继承Thread创建线程演示
代码运行截图
简单总结就是4个步骤:
1,继承Thread这个类
2,重写run() 这个方法
3,new 继承Thread类这个类的对象,new了几个就是创建了多少个线程;
4,我们需要逐一调用start()方法来开启线程;
方式2;实现Runnable接口
代码运行截图:
总结:
1,我们需要实现这个接口中run()方法
2.我们只需要new一个实现了这个接口的对象;
3,然后new Thread()这个类,把实现这个接口的对象放在该构造器中,就是套娃操作
4,start()开始该线程
注意:我们只需要创建一个实现该接口的对象,我们需要几个线程,只需要将new Thread()把这个接口放到构造器中就好。
方式3:实现Callable这个接口
代码运行截图:
总结:
1,我们需要实现Callable接口中的call()方法,且这个可以有返回值,供我们查看;
2,new实现了这个接口的类
3,需要new FutrueTask这个类来进行第一次套娃
4,需要new Thread这个类进行二次套娃
5,开启线程
简单来说:1,我们只需要一个实现了该接口的类
2,我们需要new FutrueTask 和 new Thread来进行俩次套娃,是成对出现的;
3,开启线程;
线程安全问题解决:
注意:我们一定是需要同一把锁,所以锁一定要唯一;
共有三种方式:
1,同步代码块
2,同步方法
3,Lock锁
一,继承Thread类解决线程安全问题
1,同步代码块的方法
运行截图;
错误的this当锁演示;
2,同步方法演示
运行截图:
3,lock演示
代码运行截图:
总结:1,当我们创建的对象有多个时候,我们一般用 当前类做同步监视器,在Thread类中;
2.在接口接口中,因为我们只是new一个实现接口的实现类,然后是套娃,我们可以直接使用this来充当同步监视器;