二十四、多线程

一、多线程的概念*
Thread线程
1.进程:是应用程序的执行实例,启动一个应用程序就会开启一个或者是多个进程,它有独立的内存空间,
举例:打开QQ,打开迅雷
2.线程:是CPU调度的基本单位,是进程中的最小的单元,它可以独立完成一个顺序控制流程。
举例:多线程下载会更快,启动一个迅雷,同时下载多个任务,这就是多线程
二、多线程的介绍
1.单线程:举例去网吧,如果网吧是单线程,那么只能允许一个人上网,这个人如果没有上完,那么下一个人就不能进行上网的操作,
或者是你在网上买东西,如果是单线程,那么意味着在买东西的时候,只能有一个人进行挑选,等他结束之后,另外一个人才能进行。
2.多线程:举例网上买东西,同时可以有多个人在买不同的或者是相同的衣服,举例2我们连接网络上网,其实他也是一个多线程
3.一个进程中有多个线程,多个线程之间是交替占用CPU的资源,进行的是抢占式的调度。谁抢到运行资源谁就可以运行,,而非是均等的调度‘’
三、掌握线程的启动和创建
1.多线程:程序中有且只有一个主线程,它应该是最先开启,最后关闭,同时也是能够开启其他的子线程的一个线程‘
2.我们之前玩的编程都是在单线程的模式,----就有一个主线程main
3.Java中main方法就是主线程的入口
Thread currentThread();//获取当前的线程对象
void setName(String name);//给线程设置名称

四、多线程的编写有俩种模式
1.继承Thread类的形式
①自定义类去继承Thread
②重写run方法,它是线程所要执行的内容
③创建线程的对象’
④执行start();方法开启线程
2.实现Runnable接口(推荐:使用,因为java是单根继承)
①定义类去实现Runnable接口,(它是一个组件,并不是完整的线程)
②重写run方法
③借助Thread类来创建线程对象
Thread(Runnable runnable);
Thread (Runnable runnable, String threadName)
④执行start()方法,开启线程

五、介绍run()和start()的区别
如果是在主线程中直接调用run方法,那么就只会像调用其他的普通的方法一样执行run()方法内的代码,不会产生新的线程,全程都是主线程在干活
而当调用了start()方法之后,他就会开启一个新的子线程,然后调用run()方法执行线程操作。该子线程和主线程是交互执行的
六、了解线程的状态
创建状态:当线程创建对象之后
就绪状态:调用了start()方法之后
运行状态:线程正抢到了CPU资源之后。
死亡状态:线程运行完毕之后,或者干涉结束
阻塞状态:当执行了线程休眠状态之后,或者用户输入时,会进行阻塞,结束阻塞之后,会进行就绪状态然后重新等待抢占资源
七掌握线程的调度的方法、
1.优先级:线程默认的优先级是5,优先级的范围是【1,10】
2.可以通过设置优先级来调整争抢的概率
3.设置优先级:setPriority(存放优先级的数值);
4.获取优先级:int getPriority();
5.Thread中有三个常量分别表示是最低,最高,默认
6.休眠:Thread.sleep(毫秒值);//休眠的时长
7.线程的强制停止运行:Thread.current.join();//线程的强制的停止执行等待其他的线程执行完之后在进行执行
8.线程的礼让:Thread.yield();线程的礼让,只是提供一种可能,但是不一定保证会实现礼让
八、掌握线程的同步*
1.多线程在操作同一个资源的时候,(增删该查),就会出现线程的同步问题
2.添加synchronized关键字,或者添加synchronized代码块
3.枷锁的内容:JVM只会允许一个线程进入,其他线程需要等待,但是为枷锁的部分,只要是在run方法中,其他的线程还会执行
4.
九、理解线程的安全
HashMap和HashTable的区别:
1.都是实现了map接口
2。hashmap允许建和值为null,hashtable不允许建和值为null
3.hashmap是线程不安全的,但是效率高,hashtable是线程安全的,但是效率不高,
4.StringBuffer和StringBuilder、StringBuffer线程安全效率不高。相反StringBuilder
5.Vecotr和ArrayList, ArrayList是线程不安全的,但是效率高,相反Vector是线程安全,效率低

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88119900