ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多线程

2022-02-25 11:35:42  阅读:131  来源: 互联网

标签:加锁 run 重写 调用 线程 多线程 方法


多线程的几种实现方式:

1、继承Thread类,重写run方法,直接声明该类类型的对象调用start方法运行线程,本质上会调用到该类重写的run方法

2、实现Runnable接口,重写run方法,声明该类类型的变量作为参数传入Thread类型的变量调用start方法运行线程,本质上会调用到该类重写的run方法(区别于第一种)

3、实现Callable接口,重写call方法,声明该类类型的变量作为参数传入Thread类型的变量调用start方法运行线程(其实中间会封装一层FutureTask,实现了Runnable接口的一个类),本质上会调用到该类重写的run方法(有返回值)

4、线程池

 

线程安全:

考虑到业务场景的不同,需要对多线程进行同步处理,有两种方式:

1、隐式加锁:synchronized关键字加锁,有两种方式,同步代码块和同步方法,但是为了提高效率,锁定的代码越少越好

(需要注意的是加锁的时候所有的对象要是同一个锁,可能会用到static关键字共享类的成员变量,及一个new出来的对象作为锁的参数,或者直接给本类类型加锁,及xxx.class)

2、显式加锁:lock接口的实现类ReentrantLock,实现了显式加锁的要求,该实现类的对象调用lock()方法和unlock()方法可实现加锁与解除锁定

显式加锁为jvm调度,相比隐式加锁更加节约资源

说到线程安全,想到一个知识,做个笔记,arraylist和hashmap的线程安全类vector以及hashtable已经过时,现在使用SynchronizedList和SynchronizedMap

 

使用时应该注意的方法有sleep()、wait()、join()、notify()等,其他参考API手册

标签:加锁,run,重写,调用,线程,多线程,方法
来源: https://www.cnblogs.com/tjdy/p/15935260.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有