JAVA 多线程 笔记
来源:互联网 发布:青蜂网络 编辑:程序博客网 时间:2024/05/19 12:17
Thread是JAVA中的一个类
java.lang.Thread(java.lang.*是java默认自带包,不用import)
①创建并启动一个新的线程
Runnable threadJob = new MyRunnable();
//创建Runnable 对象(线程的任务)
Thread myThread = new Thread(threadJob);
//Thread(Runnable 任务)--->Thread 构造函数
myThread.start();
//要启动线程,要不不会为线程分配独立的空间,实际上每个线程都有自己独立的运行空间,栈
对于线程的任务,要事先定义一个类,实现Runnable 接口
Runnable接口只有一个方法要实现,public void run();
②线程调度
视不同的JAVA虚拟机,不同的计算机,不同的时刻,有可能展现不同的调度结果(线程运行的次序和结束的次序可能不一样)
原因是,多线程时,让线程宏观上并行运行(但是单处理器计算机微观上来讲只有一个线程占据CPU),线程被轮流调用运行,相当于PC指针在线程之间疯狂的不停移动= =
③Thread.sleep()
Thread.sleep(2000);
//让线程停止工作,睡2000ms,即2 秒
//有可能抛出异常 InterruptedException
④临界区问题
比如两个线程同时对money变量有更改,由于线程是并行的,可能导致更新的失效
例线程A和线程B
线程A : int a=money;
money=a+1;
线程B: int a=money;
money=a+1;
线程A运行完 第一句 int a=money 被调度器敲晕了,线程B开始做任务,完成了两步,实现了money增1。
此刻线程A被唤醒,但是并不知道B已经对money做了更新,a保存的扔是B昨晚之前的money值。A做完后,money值仍只增加了1。
这就产生了错误
解决方案:synchronized修饰符
synchronized代表,被它修饰的代码段,要么全做,要么全不做,保证了功能的原子性(atomic 不可分割)
用法:
1. public synchronized void increment(){
int a=money;
money=a+1;
}
2. public void increment(){
doStuff();
synchronized(this){
int a=money;
money=a+1;
}
}
//局部的
//this用以指示当前对象
⑤死锁
死锁指两个或两个以上的线程互相持有资源而陷入永久的等待。
JAVA没有处理死锁的机制,所以设计程序要小心
⑥线程重命名
Thread a = new Thread(new MyRunnable());
a.setName("XiaoJing");
//多半用于测试
一个超级简易聊天客户端服务端测试小程序:
- java笔记--java多线程
- Java多线程笔记
- Java多线程学习笔记
- java笔记8多线程
- Java多线程学习笔记
- Java多线程阅读笔记
- java 多线程笔记。
- Java学习笔记---多线程
- java多线程笔记
- JAVA多线程笔记
- java多线程笔记
- java笔记 多线程总结
- JAVA 多线程 笔记
- java多线程学习笔记
- Java多线程讲解笔记
- JAVA笔记:多线程入门
- Java多线程学习笔记
- Java多线程笔记
- JAVA程序输出到.txt文件的换行符处理
- java.io 与对象序列化 笔记
- JAVA中private protected public 修饰符及JAVA默认修饰符(default acess)
- JAVA Socket 网络联机 客户端 服务端 笔记
- Building your own toolchain
- JAVA 多线程 笔记
- JAVA.util.Collections List的常用方法,sort()
- Java.util.Collections.sort(List l) 排序 [implements Comparable]
- JAVA 泛型(generic)
- JAVA 里的数据结构 Set List Map
- Java.util.Collections.sort(List l) 排序 [implements Comparator]
- JAVA 多态(以及多态在数组和ArrayList中的体现)
- JAVA GUI 图形界面 ※插入图片※
- JAVA 内部类