进程和线程

永远记住:线程安全永远只是为了保护共享的成员变量!

与方法、类、局部变量什么的都没关系!!!data01\src\data\filemerge\LogFiles.java
(方法使用就压栈啊,局部变量也在栈中啊,只有成员变量需要线程出栈在共享内存中改。)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现线程

第二种方式更常用,因为还可以extends,更灵活!
在这里插入图片描述

方法一:MyThread t = new MyThread();在这里插入图片描述

方法二:Thread t = new Thread(new MyRunable());
在这里插入图片描述

方法二:(采用匿名内部类)
在这里插入图片描述

方法三:实现接口interface Callable< V > call()方法,有返回值
在这里插入图片描述

获取返回值get()方法会导致当前线程阻塞:
在这里插入图片描述

方法二、三实现区别:
在这里插入图片描述

重要 线程的生命周期

一个字一个字理解! 背会这张图!
在这里插入图片描述

线程 声明自己currentThread()、睡觉sleep()、让位yield()。都是自己说了算的,所以是静态方法!

静态方法一:获取当前线程 Thread.currentThread();

在这里插入图片描述

静态方法二:阻塞当前线程 Thread.sleep(lang millis);

在这里插入图片描述

也可以使用TimeUnit:
在这里插入图片描述

面试题:
在这里插入图片描述
唤醒睡眠:线程.interrupt()
在这里插入图片描述

终止线程:
线程.stop();(已过时,不建议使用)会直接杀死线程
使用布尔判断
在这里插入图片描述

线程调度(了解)

优先级高,每次抢到的时间片多。
在这里插入图片描述
在这里插入图片描述

实际项目开发中服务器已经将线程的定义、创建、启动都已经实现完,所以以上内容不是很重要。

重点开始 线程安全问题

局部变量就没有线程安全问题,因为局部变量不共享!
在这里插入图片描述

synchronized

synchronized()确实是 在内存中 判断线程是否共享括号中的对象锁

锁粒度大并发度会比较低

	synchronized(🔒【是需要同步线程的一个共享对象】){
		...代码块尽量小...
	}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

出现在static方法的synchronized默认是类🔒:(类锁就这一种用法)
在这里插入图片描述

当🔒(共享对象)被占用时,共享此对象的其他任何线程就不能再执行任何synchronized方法体

死锁

在这里插入图片描述
在这里插入图片描述

去看javase\test05\src\com\neuq\ticketing

守护线程

在这里插入图片描述

setDaemon(true)设置守护线程

在这里插入图片描述

定时器

在这里插入图片描述

schedule(定时任务,第一次执行时间,间隔多久执行一次)
在这里插入图片描述

定时器总结:定时器Timer就是一个线程类

  • Timer timer = new Timer(); ===> timer.start();timer就是一个Timer线程
  • timer.schedule()就相当于给timer线程赋任务,赋予后立即执行下一句 (至于这个任务什么时候真正执行 那就是timer线程内部的事)
  • 要是重新timer.schedule(新任务);那么上个任务等肯定就无法执行了

wait();notify();

面试题

在这里插入图片描述
在这里插入图片描述
wait(long timeout): timeout:最大等待时间(毫秒),超过会被唤醒,再次进入锁池

使用wait();和notify();

注意:wait()永远都和while()循环结合使用!(防止虚假唤醒)
while()判断线程需要等待,线程进入while循环。线程遇见wait()后会释放对象锁同时进入等待池等待!此后,此线程被唤醒后又抢到锁,将从wait()语句后继续执行。循环再判断是否需要等待…

synchronized(this){
	while(需要等待的条件){
		this.wait();
	}
	执行语句...
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值