ITPub博客

首页 > 大数据 > 数据挖掘 > 好程序员大数据学习路线分享线程学习笔记二

好程序员大数据学习路线分享线程学习笔记二

原创 数据挖掘 作者:好程序员IT 时间:2019-09-29 15:25:57 0 删除 编辑

  好程序员大数据学习路线分享 线程 学习笔记二, 为什么要让run() 方法自动开启 。

   cpu 有随机性,线程抢到 cpu ,才能干活,所以 run() 方法必须通过 strat() 方法自动启动 , 这样 cpu 就获得了一个信号,知道该线程可以抢占 cpu 资源;

 

手动运行垃圾回收器

 

原理:当执行gc 是,会触发垃圾回收机制,开启垃圾回收线程,执行 finalize 方法

 

cpu 的特性:多个线程之间是抢 cpu 的关系, cpu 有随机性

 

主函数结束,主任务区结束,主线程随着任务的结束而结束,线程随着任务的开始而开始

 

创建线程

 

默认情况下,主线程和垃圾回收线程都是由系统创建

 

①用 Thread 创建线程对象

 

Thread thread1=new Thread();  // 只是创建 Thread 对象

thread1.start();   // 开启线程

Thread 类里的 run() 方法默认是空的,所以 start() 方法执行结果

所以需要继承Thread 类 重写 run() 方法

若run() 方法直接被手动调用, run() 对应的线程跟调用该方法所在的线程对应

Thread 类实现了 Runnable 接口, Runnable 接口里面只有 run() 方法 ,Thread 类里实现的 run() 方法也只是空方法体,需要被继承去重写

 

创建一个A 类实现 Runnable 接口,重写 run() 方法

A a=new A();

Thread to=new Thread(A);

to.start();

给某个方法的线程冲突部分加锁

锁的条件

①锁必须是对象

②要被所有的线程共享

 

同步代码块

synchronized(this){ 代码块 }

 

同步函数

非静态  public synchronized void xxx(){}   // 默认的锁是 this    synchronized(this)

静态 public synchronized static void xxx(){}  // 默认的锁是当前类的字节码文件    synchronized(xx.class)

notify( 终止线程休眠 )     wait( 线程休眠,不可以抢占 cpu)

wait()--> 必须在同步环境中使用,必须使用锁调用,执行这行代码,对应的是哪个线程,就

notify()--> 唤醒的是同一把锁下的线程,

Lock( 显示同步 ) 替换 Synchronized( 隐式同步 )

 

// 创建锁对象 Lock lock=new ReentrantLock();

// 用于生产任务的 Condition

Condition proCon = lock.newCondition();

 

// 用于结束任务的 condition

Condition conCon = lock.newCondition();

 

// 开启锁

lock.lock();

proCon.await();

conCon.signal();

conCon.await();

proCon.signal();

 

// 关闭锁

lock.unlock();

 

守护线程

当程序调用setDaemon 方法时,并且将参数设置成 true, 当前线程就变成了了守护线程,只要主线程结束,该守护线程就会结束,这个方法一定要在 start 前调用

join() 方法 , 优先级高于主线程,主线程会等当前的线程执行完后再去执行 ; 该方法是在 start 之后 。

 

 

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2658717/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
欢迎关注公众号:好程序员特训营 web前端教程分享 723729549 大数据教程分享 703503210

注册时间:2019-03-20

  • 博文量
    539
  • 访问量
    410781