day4 - 线程Thread和synchronized(part 1)

196 阅读1分钟

线程


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…