java线程基础
来源:互联网 发布:mysql 5.17 ngram 编辑:程序博客网 时间:2024/05/22 02:13
1、异常类可以通过继承Runnable接口,或者继承Thread类
2、线程安全:当多个线程访问访问同一个代码块时总是能表现出正确的行为
synchronized:被synchronized修饰的代码块(给代码块加锁),一次只有一个线程拿到执行该代码块的锁。而其他线程要执行该代码块必须等待持锁的线程释放该锁。
注:线程之间存在锁竞争的问题。在释放锁的时候,其他线程就会去竞争锁,这可能导致cpu占用变高
3、多个线程可以有多个锁:多个线程,每个线程有自己的锁,拿到自己的锁后去执行synchronized方法
public class MoreLock {
private int num = 0;
public synchronized (static) void initNum(String str){
if(str.equals("a")){
num = 100;
System.out.println("this num is inited by 100");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
num = 200;
System.out.println("this num is inited by 200");
}
System.out.println("this num is " + num);
}
public static void main(String[] args) {
final MoreLock moreLock1 = new MoreLock();
final MoreLock moreLock2 = new MoreLock();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
moreLock1.initNum("a");
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
moreLock2.initNum("b");;
}
});
t1.start();
t2.start();
}
}
以上:t1持有moreLock1的锁,t2持有moreLock2 的锁。两个线程持有的锁不同
注:一个对象持有一把锁,要想该类的所有对象持有相同的锁,在方法上加static关键字即可,如上。
未加static的输出结果:
this num is inited by 100 this num is inited by 100
this num is inited by 200 本来所有对象持有一把锁的输出结果应该是(也是加static的结果): this num is 100
this num is 100 this num is inited by 200
this num is 200 this num is 100
- 线程之一:JAVA线程基础
- 线程之一:JAVA线程基础
- java线程学习基础
- Java基础 -- 线程
- Java基础 -- 线程2
- JAVA线程基础
- Java 线程基础
- Java线程基础1
- java线程基础
- java基础 线程
- Java 线程基础
- java 线程基础
- 十三、Java线程基础
- java线程基础
- java基础之线程
- JAVA线程基础(一)
- Java基础之线程
- java基础--线程总结
- ElasticSearch学习21_TF-IDF及其算法
- c#基本语法
- [cernRoot] how to get contours from a TH2D
- 微信小程序之数据传递
- mysql的sql_quote_show_create与SHOW CREATE TABLE命令介绍
- java线程基础
- 把MyEclipse中的项目部署到服务器
- 横竖屏切换时候Activity的生命周期
- 文章标题
- 欢迎使用CSDN-markdown编辑器
- status bar使用
- Android中悬浮窗口的实现原理和示例代码
- android ellipsize multiline textview
- 基础练习——进制转换