线程:用来执行代码。

 进程:用来封装线程并线程提供资源。

1. 开启线程之继承Thread

public class MyThread extends Thread{
         @Override
         public void run() {
              System.out.println("执行了线程的run方法");
          }

主线程:Java程序在启动过程自动创建的并执行main方法的线程就是主线程。

子线程:除了主线程以外的所有线程都是子线程

2. 线程的运行模式

分时式模式:每个线程平均分配CPU的使用权

抢占式模式:优先级高的线程优先使用CPU的使用权,使用频率高,使用时间长,如果是优先级相同,则多个线程去争夺CPU的使                       用权。Java的多线程是属于抢占式模式。

3.线程的状态

   新建:刚刚创建出来
* 就绪:调用start()方法进入该状态
* 运行:获得CPU的执行权
* 阻塞:调用了sleep()或wait()方法
* 死亡:调用stop()或任务执行完成。

4.卖票案例

public class SaleTicket {  //主线程
    public static void main(String[] args) {
        Ticket t1 = new Ticket("美女A");
        Ticket t2 = new Ticket("美女B");
        t1.start();
        t2.start();
    }
}

public class Ticket extends Thread {
    //记录总票数
    public static int tickets = 100;
    public Ticket(String name) {
        super(name);
    }
    @Override
    public void run() {
        while(true) {
            if(tickets > 0) {
                try {
                    Thread.sleep(2000);
                    System.out.println(this.getName()+"卖出一张票,还剩下"+(--tickets)+"张");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else {
                System.out.println("票卖完了");
                break;
            }
        }
    } 

多线程复习随笔

注:出现了线程安全问题

4.解决线程安全问题

  同步代码块执行原理:同步代码块能够保证同一时间只能有一个线程执行代码块中的代码。

synchronized(锁对象){
        // 多个线程要操作资源代码
    }

注:锁对象可以是任意对象, 锁对象必须是所有线程共享的对象

多线程复习随笔

同步方法:

修饰符 synchronized 返回类型 方法名(参数列表) {
        // 多个线程要操作资源代码
    }

同步成员方法有锁对象是:this

同步静态方法锁对象是:类名.class

start()方法和run()方法有什么区别?
    * start()会开辟一个新的执行路径(会创建线程)
    * run()不会开启线程,在当前线程执行。
    * start()方法内部调用了run方法

 

相关文章:

  • 2021-11-21
  • 2022-02-07
  • 2021-08-19
  • 2021-10-19
  • 2022-12-23
  • 2022-02-26
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2021-11-06
  • 2021-06-25
  • 2022-01-08
  • 2021-12-06
  • 2021-06-01
  • 2021-11-11
相关资源
相似解决方案