多线程基础
来源:互联网 发布:网络乞丐mc吴迪伴奏 编辑:程序博客网 时间:2024/06/03 14:57
2017-07-27
- 多线程一般两个方式,继承Thread类或者实现Runnable接口,最终都是要调用Thread的start()方法
- main方法开启主线程,后台还有jvm用于回收垃圾的后台线程。
- 线程有好几个状态,Runnable,Running,Block。每个Runnable线程都有资格争抢CPU执行权。
- Runnable表示有执行的资格等待被调度,当获取CPU执行权后,即可编程Running
- Block即为阻塞状态,此时该线程是没有执行资格的,一般是调用了join(),sleep(),wait(),或者被同步锁挡住(synchronized)。
- 当操作共享数据的时候,多线程就会造成错误,比如多窗口卖票,可能出现负数。此时需要同步代码块或者同步函数来解决。
- 静态同步函数的锁是class文件,因为静态方法执行的时候还没创建对象。
import java.lang.Thread; import java.lang.Runnable; class ThreadDemo3 implements Runnable{ private int ticket = 100; //共享数据 100张票 private boolean flag; // 定义标记,让同步代码块和同步函数都可以被执行,两者的对象锁都是this public void run () { if (flag) { while(true) { synchronized (this) { //同步代码块 if (ticket > 0 ) { System.out.println(Thread.currentThread().getName() + "......" + ticket--); } } } } else { while (true) { show(); } } } public synchronized void show() { //同步函数 if (ticket > 0 ) { //try{Thread.sleep(10); } catch (Exception e) {} System.out.println(Thread.currentThread().getName() + "......" + ticket--); } } public static void main(String[] args) { ThreadDemo3 td = new ThreadDemo3(); Thread t1 = new Thread(td); Thread t2 = new Thread(td); t1.start(); td.flag = false; t2.start(); } }
阅读全文
0 0
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- Codeforces 688E The Values You Can Make(DP)
- RH134-第十六节-磁盘管理
- 服务器端之jsp内置对象和作用域
- Linux 防火墙知识 Filter配置信息 及简单配置demo
- [转]MQTT协议分析学习
- 多线程基础
- LeetCode 3Sum C++
- 前端面试指南CSS篇
- 杂谈:Gamemaker 2d游戏引擎
- Educational Codeforces Round 26 C. Two Seals
- 2017 Multi-University Training Contest
- python爬虫基础
- 如何写出高质量的代码?
- JSP九大内置对象及四个作用域