Day13 多线程
3).多线程的好处:
提高程序的运行效率,提高用户的体验度。 线程不会因为等待某个资源而进入等待状态
创建新的线程:
* 定义类继承Thread
* 重写方法run
* 创建Thread子类的对象
* 调用子类对象的方法start()
*
* 为什么继承Thread
* Thread类是线程对象类
* 继承了Thread,子类也是线程对象
*
* 为什么重写run
* Sun工程师,不清楚其他人员用线程做什么
* 全部写在run中
*
* 为什么调用start
* 线程: JVM利用Windows中的功能实现
* start() 调用 本地方法,开启的线程
2.Thread类的方法,可以获取到线程名字
* String getName()
*
* Thread类方法setName(String name)
* 设置线程名字
*
* 获取主线程名
* Thread类,定义静态方法
* static Thread currentThread() 返回当前线程
* 什么是当前线程:现在运行的线程
第二种方式实现Runnable接口避免了单继承的局限性,所以较为常用。实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。
第一种方式继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。
实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。
3.创建线程程序第二个方式,接口方式
* java.lang.Runnable
* 定义类实现接口Runnable
* 重写抽象方法run
* 创建Thread类对象,Thread(Runnable r)
* 调用Thread对象start()方法
4. 售票代码,单独定义方法
* pay方法,所有的代码,全是线程操作的共享数据
* 同步整个方法,方法的定义修饰符,加同步
*
* 同步方法有锁吗,同步方法的锁就是this对象
*
* 静态同步方法有锁吗
* 静态方法的对象锁可不是this
* 锁是 本类.class对象
* Ticket.class
当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算。就会导致线程安全问题的产生。
6.其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
7.思考:线程对象调用 run方法和调用start方法区别?
线程对象调用run方法不开启线程,仅是对象调用方法。线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行。
2:请描述在什么样的情况下会出现线程安全的问题。
线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态
变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程
同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。
6.java中提供了线程同步机制,它能够解决上述的线程安全问题,请分别写出他们的格式
3.1同步代码块:在代码块声明上 加上synchronized
synchron