线程里面的并发与并行
并行:指两个或多个事件在同一时刻发生(同时发生)。
并发:指两个或多个事件在同一个时间段内发生。
多线程的部分方式:
1>采用继承
2>实现接口
3>实现Callable 接口
Thread类的部分方法
void start(): 启动线程,并执行对象的run()方法
run(): 线程在被调度时执行的操作
String getName(): 返回线程的名称
void setName(String name):设置该线程名称
案例1. 两个线程轮流打印数字,一直到100
package com.zuoye.xiancheng; public class Demo01 extends Thread{ static Object o = new Object(); static int dy=100; @Override public void run() { while (true){ try { Thread.sleep(1500); synchronized (o){ if (dy>0){ System.out.println("dy = " + dy); dy--; }else { System.exit(0); } } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Demo01 demo01 = new Demo01(); demo01.start(); Demo01 demo011 = new Demo01(); demo011.start(); } }x效果如下:
案例2. 三个窗口同时卖票 用 实现Runnable方式
package com.zuoye.xiancheng; public class Demo02 implements Runnable{ static int num= 18;//总量数量 static Object o=new Object(); @Override public void run() { while (true){ try { Thread.sleep(1500); synchronized (o){ if (num>0){ System.out.println("您当前所购买的票号为:"+num); num--; }else { System.out.println("当前车辆的票已售完"); System.exit(0); } } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Demo02 demo1 = new Demo02(); Thread thread1= new Thread(demo1); thread1.start(); Demo02 demo2 = new Demo02(); Thread thread2 = new Thread(demo2); thread2.start(); Demo02 demo3 = new Demo02(); Thread thread3 = new Thread(demo3); thread3.start(); } }