[Java 09 多线程] 线程是指一个进程在执行过程中可以产生更小的程序单元
来源:互联网 发布:java语言基础考试题 编辑:程序博客网 时间:2024/05/17 22:32
p9 第九章 多线程
进程是程序的一次性动态执行过程,它需要经历从代码加载,代码执行,到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时运行多个进程(程序)。
多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是在进程的基础上进行的进一步划分。所谓多线程是指一个进程在执行过程中可以产生更小的程序单元,这些更小的单元称为线程,这些线程同时存在,同时运行,一个进程可能包含了多个同时执行的线程。
Java 中线程的实现
一,继承 Thread 类
二,Runnable 接口
public class Thread extends Object implements Runnable
(1), 线程的中断,合并,后台线程, 线程的休眠, 线程的优先级, 线程的礼让
(2), 线程的同步 与 死锁
(3), Object 类对线程的支持 -- 等待与唤醒
(4), 线程的生命周期
总结 : Thread / Runnable run() 方法
Thread-05- 线程同步-生产者与消费者的经典问题
进程是程序的一次性动态执行过程,它需要经历从代码加载,代码执行,到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时运行多个进程(程序)。
多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是在进程的基础上进行的进一步划分。所谓多线程是指一个进程在执行过程中可以产生更小的程序单元,这些更小的单元称为线程,这些线程同时存在,同时运行,一个进程可能包含了多个同时执行的线程。
Java 中线程的实现
一,继承 Thread 类
二,Runnable 接口
public class Thread extends Object implements Runnable
(1), 线程的中断,合并,后台线程, 线程的休眠, 线程的优先级, 线程的礼让
(2), 线程的同步 与 死锁
(3), Object 类对线程的支持 -- 等待与唤醒
(4), 线程的生命周期
总结 : Thread / Runnable run() 方法
在每一个线程创建和消亡之前,均会处于创建,就绪,运行,阻塞,终止 状态之一
TestThread1 入门
package com.qunar.basicJava.javase.p9thread;/** * Author: libin.chen@qunar.com Date: 14-5-20 14:17 */public class TestThread1 { public static void main(String args[]) { Runner1 r = new Runner1(); r.start(); // r.run(); // Thread t = new Thread(r); // t.start(); for (int i = 0; i < 100; i++) { System.out.println("Main Thread:------" + i); } }}// class Runner1 implements Runnable {class Runner1 extends Thread { public void run() { for (int i = 0; i < 100; i++) { System.out.println("Runner1 :" + i); } }}// 马老师心得 : 能使用接口,就尽量使用接口,别从 Thread 继承,因为缺少灵活性。TestInterrupt 线程的中断
package com.qunar.basicJava.javase.p9thread;/** * Author: libin.chen@qunar.com Date: 14-5-20 14:19 */import java.util.*;public class TestInterrupt { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); try { Thread.sleep(10000); } catch (InterruptedException e) { } thread.interrupt(); }}class MyThread extends Thread { boolean flag = true; public void run() { while (flag) { System.out.println("===" + new Date() + "==="); try { sleep(1000); } catch (InterruptedException e) { return; } } }}TestJoin 线程的合并
package com.qunar.basicJava.javase.p9thread;/** * Author: libin.chen@qunar.com Date: 14-5-20 14:22 */public class TestJoin { public static void main(String[] args) { MyThread2 t1 = new MyThread2("abcde"); t1.start(); try { t1.join(); // 合并线程,等待该线程结束,再恢复当前线程的执行 } catch (InterruptedException e) { } for (int i = 1; i <= 10; i++) { System.out.println("i am main thread"); } }}class MyThread2 extends Thread { MyThread2(String s) { super(s); } public void run() { for (int i = 1; i <= 10; i++) { System.out.println("i am " + this.getName()); // 线程名字 try { sleep(1000); } catch (InterruptedException e) { return; } } }}TestYield 线程的礼让
package com.qunar.basicJava.javase.p9thread;/** * Author: libin.chen@qunar.com Date: 14-5-20 14:27 */public class TestYield { public static void main(String[] args) { MyThread3 t1 = new MyThread3("t1"); MyThread3 t2 = new MyThread3("t2"); t1.start(); t2.start(); }}class MyThread3 extends Thread { MyThread3(String s) { super(s); } public void run() { for (int i = 1; i <= 30; i++) { System.out.println(getName() + ": " + i); if (i % 10 == 0) { yield(); // 让出 CPU, 让当前线程进入队列等待 } } }}TestSync 线程的同步
package com.qunar.basicJava.javase.p9thread;/** * Author: libin.chen@qunar.com Date: 14-5-20 14:40 */public class TestSync implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { TestSync test = new TestSync(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); } public void run() { timer.add(Thread.currentThread().getName()); }}class Timer { private static int num = 0; public synchronized void add(String name) { // 锁定当前对象资源 // synchronized (this) { num++; try { Thread.sleep(1); } catch (InterruptedException e) { } System.out.println(name + ", 你是第" + num + "个使用timer的线程"); // } }}
Thread-05- 线程同步-生产者与消费者的经典问题
package com.bjsxt.chap9Thread;public class ProducerConsumer { public static void main(String[] args) { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); //new Thread(p).start(); //new Thread(p).start(); new Thread(c).start(); }}class WoTou { int id; WoTou(int id) { this.id = id; } public String toString() { return "WoTou : " + id; }}class SyncStack { int index = 0; WoTou[] arrWT = new WoTou[6]; public synchronized void push(WoTou wt) { while (index == arrWT.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); arrWT[index] = wt; index++; } public synchronized WoTou pop() { while (index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); index--; return arrWT[index]; }}class Producer implements Runnable { SyncStack ss = null; Producer(SyncStack ss) { this.ss = ss; } public void run() { for (int i = 0; i < 20; i++) { WoTou wt = new WoTou(i); ss.push(wt); System.out.println("生产了:" + wt); try { Thread.sleep((int) (Math.random() * 200)); } catch (InterruptedException e) { e.printStackTrace(); } } }}class Consumer implements Runnable { SyncStack ss = null; Consumer(SyncStack ss) { this.ss = ss; } public void run() { for (int i = 0; i < 20; i++) { WoTou wt = ss.pop(); System.out.println("消费了: " + wt); try { Thread.sleep((int) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }}
0 0
- [Java 09 多线程] 线程是指一个进程在执行过程中可以产生更小的程序单元
- MFC中一个进程的产生过程
- exec函数族可以在进程中执行另外一个程序,字符串复制函数strncpy
- 在文本框单元中添加了一个小的按钮
- 当一个控制器中有两个scrollview,可以在不用多线程的条件下同时执行
- JAVA多线程—CountDownLatch-一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
- 一个Java程序的执行过程
- 一个Java程序的执行过程
- 一个Java程序的执行过程
- 一个java程序的执行过程
- mkdir是windows的一个命令,也就是在命令行可以直接运行的命令。如果你在命令行中可以直接执行"python" 那么就可以替换执行
- 编写一个生产者,消费者多线程程序,一个线程随机产生数据,另一个线程显示所产生的数据.
- java线程:一个死锁的小程序
- 01线程是一个程序里不同的执行路径
- 01线程是一个程序里不同的执行路径
- java中main方法启动的是一个进程还是一个线程
- 从汇编看一个小程序的完整执行过程
- Java中程序的执行过程
- 最长回文子串
- 二分图最大匹配(匈牙利算法)
- 远程监控Tomcat的JVM运行情况详解
- HPUX 查看系统信息(CPU,主机型号,物理内存等)
- Android开发者学习资源
- [Java 09 多线程] 线程是指一个进程在执行过程中可以产生更小的程序单元
- 广播(观察者模式)
- 浅析Java虚拟机结构与机制
- ehcache 打开统计信息
- 官方和风格豪放国家
- rzsz编译小技巧--禁止停顿三秒的描述
- getopt的用法 c,c++程序捕获main参数
- 中国历史朝代顺序表
- ImageView的android:scaleType各属性含义