java多线程的概念

多线程:Thread

一,概念:

1.进程:每个运行的程序就是一个进程

2.线程:每个进程至少有一个线程,线程是进程的最小单位

3.线程的执行是在抢占cpu的资源,谁抢到就执行谁

4.同步: 一步一步执行

5.线程是异步线程: 各执行各的

二,使用

1.重写Thread的run方法,在run方法中定义

2.run方法和start的方法的区别

  • run只是一个实例方法
  • start是启动线程,线程一旦启动个个执行
  • main的执行也是线程,main叫主线程

3.给线程设置然后获取名字

1.设置:

  • Thread(String name) 创建线程对象并且取名
  • setName(String name)通过线程对象给线程设置名字

2.获取:

  • getName()返回线程名称
  • 在使用线程的地方,线程对象.getName
  • 在线程run方法中获得对象名字this.getName super.getName()
  • 动态获取当前线程static Thread currentThread() ,在.getName{最常用}

4.线程安全的问题

定义:当多线程操作一个共享的数据的时候就会出现线程安全的问题

1.解决线程安全的问题

  1. 同步代码块:synchronized

    1. 保证当前线程功能执行前,别的线程不能来执行(保证顺序执行)
      语法:
      synchronized(对象(同步监听对象){
      //同步监听对象是大家共享的,推荐字节码对象
      //出现线程安全的代码
      }
  2. 同步方法
    语法:synchronized修饰的方法
    如果当前方法有线程在执行那么下一个执行该方法的线程,需要等下一个执行完
    同步监听对象:实例方法默认是this,静态方法默认是字节码

  3. 注意:继承thread创建线程的方式不能通过同步方法来解决线程安全的问题,一般是实现implements Runnable用这解决

  4. StringBuffer中全是同步方法,解决线程安全问题,效率会比stringbulider低

  5. 如果使用实现Runnable接口的子类在去调用Thread里面的构造器,可以不用加static,因为它们只有一个对象
    Window window = new Window();
    Thread w1 = new Thread(window, “窗口1”);
    Thread w2 = new Thread(window, “窗口2”);
    Thread w3 = new Thread(window, “窗口3”);

  6. 锁:

    • Lock接口,没有提供获得实例的方法,所以我们要使用ReentrantLock
    • 使用的时候注意一个细节:锁需要多线程共享一把锁。
    • 死锁:由于代码出现异常导致一直没有解锁就是死锁
    • 因此我们要用try catch语句来方锁,在finaly代码块关锁
    • 实现 Runnable方式使用同步方法解决线程安全的问题,是可以同步方法解决的,继承thread最好不用同步方法,因为如果有实例参数,静态方法调用不了
    • Thread的sleep方法,sleep(long millis)方法就是使线程暂停执行多少毫秒,应用的场景:一般用它来模拟网络拥堵
      了解:quartz 和 xxl-job来解决线程计时。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值