小李的40天java历程——Day11(JSE)

线程

/**
 * 进程:进程是由操作系统运行的,分配给一个程序内存的,并发的过程
 * 线程:1.概念 
 * 		由进程执行的,是存在与进程中的,一个进程可包含多个线程,没有分配内存的,而是本身有一个提供程序执行的堆栈的,并发的过程。
 * 		线程在切换时,比进程快很多。
 * 		2.线程的使用场合:完成多个任务的情况,例如下载文件
 * 		3.创建线程的方式:
 * 			第一种:继承Thread  不足之处:1。由于java是单继承,所以无法继承其他的类   2.继承线程必须重写run方法,导致线程执行必有耦合,致使执行效率下降
 * 			第二种:接口Runnable 优势:	 1 可以多实现 	2.单独定义执行文件  run 不会实现耦合
 * 		4.currentThread:查看当前调用的线程是谁。
 * 			mian方法时jvm自己创建的,有名字mian,其他的大多没有其专门的名字:都是Thread-0......
 * 		5.join:void join()
 * 			概念:一旦调用该方法,调用该方法的线程进入阻塞态,直到调用该方法的所属线程执行完毕以后,才能执行。
 * 			用途:解决多个线程一起工作,导致的顺序问题
 * 			局部内部类:如果其中有变量,还要赋值,则将变量定义到方法的外面。
 * 				原因:局部内部类规定引用方法内的变量,必须是final的,而你却要再局部内部类中改变他的值,是不符合逻辑的。
 * 		6.守护线程:void setDaemon(booelean);
 * 			1.情况
 * 			当前台进程执行完毕以后,还有后台进程执行的话,也马上立即结束后台进程
 * 			如果守护线程执行完毕后,还有前台进程(mian中还有执行语句),那么守护进程就不会消失
 * 			使用后台进程设置必须再start前面
 * 			2.什么时候用后台进程呢?
 * 				就是当有死循环的时候,或者说是GC最适合。
 * 		7.阻断进程:static void yeild() 只要线程一执行他的话,当前线程就会阻塞,转给其他进程
 * 		8.CurrentThread:查看当前调用线程
 * @author lei_l
 *
 */

线程同步

/**
 * 1线程并发造成的问题:并发造成多线程之间的竞争,他们之间抢占资源,导致线程执行顺序混乱,严重时导致程序奔溃。
 * 2.解决的方法:引入线程同步 synchronized(一段同步锁/多段互斥锁)
 * 		2.1 原理及其规则:synchronized可以用来修饰方法,但是其作用域大了,会使并发效率变低,导致程序运行效率变低。所以synchronized块是更很高的选择
 * 		2.2 错误提示:
 * 			1)只有当前调用的方法才会能进去,此时门一锁。别的线程进来时就在这里排队等待。只有当线程出来时,才能进去
 *			2)synchronized (this) 必须是一个对象才能型,不然new的话是给对象上带锁,不是给门上锁(是this不是t/new object的原因)
 *			3)操作对象要是一至的:不能进两家店的试衣间。这个不是同步
 *			4) 静态方法使用synchronized一定有同步效果的,不论对象是否一直,也没有new的要求
 *			5)互斥锁原理:被synchronized修饰只要代码的对象相同,代码就互斥(例如:一个人不能又试衣服又结账)
 * 3.线程安全:1)线程安全的:StringBuffer(同步,	多线程操作用他,	    追加方式:synchronized append),vector,Hashtable
 *			    线程不安全:StringBuilder(不同步,单线程操作就用他, 追加方式:append),ArrayList,HashMap
 *		        	解决线程不安全的方式:通过集合工具类获取安全线程-->Collections.synchronizedList()获取list集合的安全线程
 *												 Coolections.synchronizedMap()获取map的安全线程
 *			2)由于转化为线程安全后,一个对象调用其增删查改等方法存在互斥操作,所以再javaApi中规定:增删改等等操作都与遍历操作不互斥。需要自行维护其间的互斥关系。
 *4.线程池:      1)作用:控制线程的数量	增加 线程的重用		(类似于公交车站调度)
 *			2)何时用:大量线程创建销毁,重复调用时使用.
 *			3)提供的线程池种类:(通过ExecutorService实现)
 *				Executor.newCashedThreadPool()-->可变线程池:兴建多个线程,可用时重复调用,不可用时会有一个待机时间将其停止销毁
 *				Executor.newFixedThreadPool()--->固定线程池: 只能创建呢么多,多了就等待排队空车.
 *				Executor.newSecheduledThreadPool()-->指定时间线程池:指定时间或者延后时间点执行线程
 *				Executor.newSingleThreadPool()-->单独线程:一个人工作
 * @author lei_l
 *
 */
public

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值