1.并发与并行
并行:指两个或多个事件在同一时刻发生(同时发生)。
并发:指两个或多个事件在同一个时间段内发生。
2.线程和进程区别
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多 个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创 建、运行到消亡的过程。
线程:进程内部的一个独立执行单元;一个进程可以同时并发的运行多个线程,可以理解为一个进程便相当 于一个单 CPU 操作系统,而线程便是这个系统中运行的多个任务
Thread线程
package com.lcx.demo1;
public class Demo1 extends Thread{
public void run() {
System.out.println("线程1");
}
public static void main(String[] args) {
Demo1 t1=new Demo1();
t1.start();
}
}
Runnable线程
package com.lcx.demo1;
public class Demo2 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("接口实现多线程");
}
public static void main(String[] args) {
// Demo2 rDemo2=new Demo2();
// Thread t1=new Thread(rDemo2);
// t1.start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("接口实现多线程2");
}
}).start();
}
}
结合线程
package com.lcx.demo1;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class Demo3 implements Callable<Integer>{
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
int i=0;
for (; i <20; i++) {
System.out.println(Thread.currentThread().getName());
}
return i;
}
public static void main(String[] args) {
Demo3 cDemo3=new Demo3();
FutureTask<Integer> ftFutureTask=new FutureTask<Integer>(cDemo3);
ExecutorService eService=Executors.newFixedThreadPool(2);
eService.submit(ftFutureTask);
try {
Integer re=ftFutureTask.get();
System.out.println(re);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
火车买票实例
package com.lcx.demo1;
public class Demo4 extends Thread{
static int count=10;
static Object obj=new Object();
public void run() {
while (true) {
synchronized(obj){
if (count>0) {
System.out.println("当前车次第"+count+"号票");
count--;
}else {
System.out.println("此车票售卖已经结束");
System.exit(0);
}
}
}
}
public static void main(String[] args) {
Demo4 t1=new Demo4();
t1.start();
}
}