线程里面的并发与并行
并行:指两个或多个事件在同一时刻发生(同时发生)。
并发:指两个或多个事件在同一个时间段内发生。
多线程的部分方式:
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();
}
}