java SE 线程

一、线程

线程的使用:
创建线程的方式:
方式一:

  1. 构建一个类继承线程Thread类
  2. 重写Thread类的run();
  3. 创建线程对象;
  4. 开启线程:对象.start();

方式二:(可拓展性强,接口可以多继承多实现)

  1. 实现Runnable接口的类,实现run();
  2. 创建线程对象;
  3. new Thread(线程对象).start();//start()是Thread独有的

每开启一个线程都会创建一个栈

Thread.currentThread();返回正在执行线程的名称


线程池
创建:Executors.newFixedThreadPool(开启线程的个数);//返回ExecutorService 类型
Thread.currentThread().sleep(毫秒值);//终止线程
线程池特点:可以通过线程池的特有方法将放入线程池的线程开启,同时可以设置同时运行线程的个数。
使未线程等待进程池里的线程结束后进去,可以减轻CPU的负担。

线程安全
       线程运行时可以将其分为有两个步骤。其一,判定。其二,运行阶段。
       当多个线程同时开启运行,由于CPU的随机分配线程时间的特性,会产生一个线程判定完成后没有执行操作,CPU的控制权便给了其他的线程。已经判定成功的线程,后续得到CPU的控制权便会直接运行,不会再次判定。所以会产生相同值等等。

解决此类问题有两种方法:

1、同步代码块
      同步代码块: 在代码块声明上 加上synchronized
synchronized (锁对象) {
       可能会产生线程安全问题的代码
}
       同步代码块中的锁对象可以是任意的对象;但多个线程时,要使用同一个锁对象才能够保证线程安全。
2、同步方法
       同步方法:在方法声明上加上synchronized
public synchronized void method(){
       可能会产生线程安全问题的代码
}
       同步方法中的锁对象是 this

使用锁对象方法的时候,可能会出现死锁的情况
同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。

多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。通过一定的手段使各个线程能有效的利用资源。而这种手段即—— 等待唤醒机制。

等待和唤醒方法是Object类的方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值