JAVA线程大全
并行与并发
- 并发:指两个事情在同一时刻发生;
- 并行:指两个事情在同一时间段发生;
进程和线程
- 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以有多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位,系统运行一个程序都是从一个进程的创建运行到消亡的过程。
- 线程:线程是进程中一个执行单位,负责当前进程中程序的执行,一个进程至少有一个线程
线程调度与主线程
- 分时调度
- 抢占式调度(JAVA使用)
- 主线程:执行main方法的线程
线程的创建
方式一继承Thread类
public class Thread1 extends Thread{
private String name;
public Thread1( String name1) {
this.name = name1;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name+" "+i);
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread1 thread1=new Thread1("A");
Thread1 thread2 =new Thread1("B");
thread2.start();
thread1.start();
}
}
方式二 实现Runable接口
public class Thread2 implements Runnable{
private String name;
public Thread2(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name+" "+i);
}
}
public static void main(String[] args) {
new Thread(new Thread2("A")).start();
new Thread(new Thread2("B")).start();
}
线程同步
当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题,要解决上述多线程并发访问一个资源的安全问题,也就是解决重复票和不存在票问题,java提供了同步机制(synchronized)来解决
有三种方式完成同步机制
- 同步代码块
- 同步方法
- 锁机制
同步代码块
synchronized(同步锁){
需要同步操作的代码
}
同步锁:对象的同步锁只是一个概念,可以想象在对象上标记了一个锁
- 锁对象可以是任意对象
- 多个线程对象使用同一把锁
注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他线程只能在外面等着
同步方法
public synchronized void(){
}
等待与唤醒机制
public class Demo04 {
public static void main(String[] args) {
Object obj= new Object();
new Thread(){
@Override
public void run() {
synchronized (obj){
System.out.println("告诉老板要买包子");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("包子做好了");
}
}
}.start();
new Thread(){
@Override
public void run() {
try {
Thread.sleep(5);//花费时间做包子
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj){
System.out.println("包子五秒后做好了");
obj.notify();
}
}
}.start();
}
}