黑马程序员----多线程
多线程
---------------------- android培训、java培训、期待与您交流! ----------------------
1.什么是线程
线程就是程序执行时的一条路径
* 2.创建线程
定义类, 继承Thread, 重写run()方法, 创建该类对象, 调用start(), 程序就会开启新线程执行run()方法
定义类, 实现Runnable, 重写run()方法, 创建该类对象, 传入Thread类构造函数, 在Thread对象调用start()方法时, 开启新线程运行run()方法
对应代码:
//两种写法
public class Demo1 {public static void main(String[] args) {Thread t = new Thread(){public void run(){for(int i = 0;i<10;i++){System.out.println("i = "+i);}}};t.start();new Thread(new Runnable(){public void run(){for(int x = 0; x < 10;x++){System.out.println("x = "+x);}}}).start();}}3.Thread类常用方法package cn.thread;public class Demo3 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfinal Happ h = new Happ();new Thread(new Runnable(){public void run(){while(true){h.happ();}}}).start();new Thread(new Runnable(){public void run(){while(true){h.toHappy();}}}).start();}}class Happ{private Object lock = new Object(); public void happ(){synchronized(lock){System.out.print("圣");System.out.print("诞");System.out.print("快");System.out.println("乐");}}public void toHappy(){synchronized(lock){System.out.print("元");System.out.print("旦");System.out.print("快");System.out.println("乐");}}}package cn.thread;public class Demo3 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfinal Happ h = new Happ();new Thread(new Runnable() {public void run() {while (true) {h.happ();}}}).start();new Thread(new Runnable() {public void run() {while (true) {h.toHappy();}}}).start();}}class Happ {public synchronized void happ() {System.out.print("圣");System.out.print("诞");System.out.print("快");System.out.println("乐");}public synchronized void toHappy() {System.out.print("元");System.out.print("旦");System.out.print("快");System.out.println("乐");}}package cn.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Demo11 {public static void main(String[] args){final pTest p = new pTest();new Thread(new Runnable(){public void run(){for(int j = 0;j<5;j++){p.p1();}}}).start();new Thread(new Runnable(){public void run(){for(int j = 0;j<5;j++){p.p2();}}}).start();}}class pTest{private ReentrantLock lo = new ReentrantLock();private Condition c = lo.newCondition();private Condition c1 = lo.newCondition();private int num = 1;public void p1(){lo.lock();if(num != 1){try {c.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}for(int i = 0;i<3;i++){System.out.println(i);}System.out.println("------1----");num = 2;c1.signal();//指定唤醒c1lo.unlock();}public void p2(){lo.lock();if(num != 2){try {c1.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}for(int i = 0;i<5;i++){System.out.println(i);}System.out.println("------2----");num = 1;c.signal();//指定唤醒c2lo.unlock();}}