线程
Tread
已知Thread是实现Runable接口的,最终Runable中的run()方法才是最终需要执行的内容
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
实现一个runnable
private Runnable myRun = new Runnable() {
@Override
public void run() {
ComUtil.print("runable running");
}
};
Thread a = new Thread(myRun);
a.start();
输出
runable running
Thread的方法
| 方法 | 含义 |
|---|---|
| sleep() | 暂停阻塞等待一段时间,时间过了就继续,但不释放锁 |
| wait() | 也是阻塞和等待,但是需要notify来唤醒。wait是需要释放锁的 |
| join() | 在一个线程中调用other.join(),将等待other执行完才继续本线程 |
| notify()、notifyAll() | 唤醒线程 |
| yield() | 当前线程可转让cpu控制权, 让别的就绪状态线程运行(切换), 也会等待阻塞一段时间, 但是时间不是由客户控制了 |
| interrupte() | 打断线程, 代替过时方法stop() |
| setPriority() | MIN_PRIORITY 最小优先级=1 , NORM_PRIORITY 默认优先级=5 ,MAX_PRIORITY 最大优先级=10 |
synchronized
一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞
synchronized的作用
①保证同一时刻只有一个线程可以执行某个方法或者代码块
②可以保证一个线程操作的共享数据变化能立即被其他线程所见(可替代volatile)
使用方法
// ①修饰实例方法
public synchronized void increase() {
share++;
}
// ②修饰静态方法
public synchronized static void increase4ClassLock() {
share++;
}
// ③修饰代码块
synchronized (inst1) {
share++;
}
part 2: juejin.cn/post/684490…