多线程
程序(program):为了完成特定任务、用某种语言编写的一组指令的集合。是静态对象
进程(process):是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡过程
线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径
线程机制是在由执行程序表示的单一进程中创建任务
java实现多线程有四种方法:
1⃣️继承Thread类
2⃣️实现Runnable接口
3⃣️实现Callable接口
4⃣️使用ExecutorService来创建线程池、用Callable直接从线程池获取线程、用Future获取返回结果
线程的锁:
一个对象里面如果有多个synchronized方法,某一时刻内, 只要一个线程去调用其中的一个synchronized方法了,其他的线程都只能等待, 换句话说,某一时刻内,只能有唯一一个线程去访问这些synchronized方法。
锁的是当前对象this,被锁定后,其他线程都不能到当前对象的其它sqnchronized方法
//买票程序
public class ThreadDemo {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0;i<10000;i++){
ticket.sale();
}
}
},"张三").start();
new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0;i<10000;i++){
ticket.sale();
}
}
},"李四").start();
}
}
class Ticket{
private int ticket = 2000;
private final Lock lock = new ReentrantLock();
public void sale(){
lock.lock();
try {
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"卖出了第"+ticket+"张票,"+"还剩"+(--ticket)+"张票");
}
} catch(Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}