首页 > 大数据 > 数据挖掘 > 好程序员大数据学习路线分享线程学习笔记二
好程序员大数据学习路线分享 线程 学习笔记二, 为什么要让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/ ,如需转载,请注明出处,否则将追究法律责任。