【Java入地-多线程与高并发】01 多线程与高并发 1
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Java入地-多线程与高并发】01 多线程与高并发 1,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2296字,纯文字阅读大概需要4分钟。
内容图文
多线程与高并发 synchronized 篇
进程 线程 协程/纤程(Quasur)
线程:一个程序里不同的执行路径
public static class T1 extends Thread{
@Override
public void run(){
System.out.println("Override Theme 中的 run 方法");
}
}
// 方法一
new MyThread().start();
// 方法二
new MyThread().start();
// 方法三
new Thread(()->{
Sout("Hello World!");
})
- 创建线程的两种方式:
- 创建一个类,继承Thread,重写方法
- 定义一个类,实现 Runnable 接口,然后重写 run 方法
启动:
//方法一:
new MyThread().start();
//方法二:
new Thread(new MyRun()).start();
//方法三:
new Thread(()->{ Sout("Hello World!");});
-
面试时候问:启动线程的三种方式是?
-
答:
- 1、从
Thread
继承 - 2、实现
Runnable
接口 - 3、从线程池中启动
Executors.newCachedThrad
- 1、从
线程的基本方法
在T1中调用 T2.join();则执行到 join 之后,T1进入等待模式,先执行完T2之后,再返回执行T1。
// sleep 睡眠
Thread.sleep(500); // 毫秒
// Yield 让出一下CPU 进入等待队列(如果没有等待的则继续执行)
// 使用场景,较少
Thread.yield();
// Join
Thread T1 = new Thread(()->{
T1.join();
})
Thread T2 = new Thread(()->{
Sout("T2");
})
- 其他方法
// 暴力结束线程(不建议使用)
.stop()
// 唤起线程
.intereptor( )
// 获取线程状态。
.getState()
线程的锁
- 上锁
private int count = 10;
private Object o = new Object();
public void m(){
synchronized(0){ //任何县城要执行下面的代码,则必须先拿到o
count--;
}
}
// synchronized(this) 等值于 synchronized(方法);
public class T{
private static int count = 10;
public synchronized static void m(){ // 等同于synchronized(T.class)
count --;
}
public static void mm(){
synchronized(T.class){
count--;
}
}
}
synchronized的特性
1、锁的是对象,不是进程 / 线程 ; 2、能不加synchronized()锁就不加,加锁之后效率极低;
可重入性
一个方法m1
加锁,另一个方法m2
也加了锁(同一把锁),那么m1
是可以调用m2
的。
异常的锁
程序中的锁的内容出现了异常,那么该锁将被释放。
synchronized 底层实现
synchronized(Object) ; 括号中一定要是Object对象,不能是String 或其他任何类型;
早期的锁:需要就去找操作系统申请、
发展后的:先乐观锁、后自旋锁、最后找系统实现(重量级锁 | 最浪费时间)
抱着“没有线程跟我争用”的心态去申请一个资源:此时是 偏向锁,只记录ID,不锁(默认没有第二个线程来访问)
如果有线程争用:升级为 自旋锁 循环10次(占用CPU)
10次之后要访问的资源还被锁着?升级为重量级锁 去操作系统申请锁(不占用 CPU)
自旋锁:在用户态解决问题,不经过内核态。
执行时间长的用系统锁,(加锁代码)执行时间特别短,线程较少,用自旋锁。
内容总结
以上是互联网集市为您收集整理的【Java入地-多线程与高并发】01 多线程与高并发 1全部内容,希望文章能够帮你解决【Java入地-多线程与高并发】01 多线程与高并发 1所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。