子线程的创建方法有两种
第一种
类继承Thread类,重写他的run方法
第二种
继承Runnable接口,并实现他的run方法
首先thread这个类也继承了Runnable的接口
所以其实也是包含其中的
调用子线程达到多线程的方法
第一,要启用子线程需要在创建子线程后
用线程名.start(),如果是线程名.run()的话
他只是调用了类中的run方法,此时仍然是
单线程的并不是多线程的这是要注意的
第二
两种方法的创建对象方法是有区别的
如果使用方法一
Mythread mt=new Mythread();
我们直接创建对象即可.因为方法继承了接口所以他
本身就是一个接口.
方法二我们首先需要定义任务对象
MyRunnable mr=new MyRunnable()//创建一个任务对象
然后在创建一个进程对象
Thread thread=new Thread(mr)//创建一个进程对象并把
任务对象作为参数传给进程即可,传送任务对象后直接逗号
可以命名进程,也可以在其他地方使用setname()命名
使用getname获取姓名,这是一个封装
还有一种是jdk1.8以后的lambda方法
直接new Thread(()->{})即可
括号()就是run方法的参数,注意run方法无参;
多线程的状态有五种
正常情况下是
创建状态-->就绪状态->运行状态->死亡状态
然而我们有时候需要人为的暂停他,亦或者程序
出现了不可预期的错误导致的暂停
因此还有一种状态为阻塞状态
总计创建状态,就绪状态,阻塞状态,运行状态,死亡状态五种.
在实现多线程以后发现,会发生并发问题.这个时候我们需要
使用线程同步来解决遇到的并发问题
同步方法使用关键字synchronized修饰
1,同步代码块
synchronized(this){此处加一个判断;正常要实现的方法体}
2同步方法
首先同步方法需要使用synchronized修饰
public synchronized void 方法名()
{一个判断
要实现的方法
}
总结:
多线程的好处,
1充分利用CPU资源
2.简化编程模型
3提升用户的体验
多线程要注意的地方
1.一个线程只做一件事
2.多线程是指线程交替占用CPU资源,并非真正的并行执行.