创建线程
创建线程有三种方式
- 在new Thread()中,用lambda表达式形式,覆写run方法
- 创建Runnable的子类,覆写run方法,再传入new Thread()
- 创建Thread的子类,覆写run方法
类成员变量与线程
- 当多个线程处理同一个类对象时,该类的静态成员变量/非静态成员变量为多个线程所共用(下面两个线程使number增加了20)
public class Thing implements Runnable{
private static int number = 100;
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (this) {
number+=10;
System.out.println(Thread.currentThread().getName()+":"+number);
}
}
}
public class Test {
public static void main(String[] args) {
Thing thing = new Thing();
new Thread(thing,"线程1").start();
new Thread(thing,"线程2").start();
}
}
- 当多个线程处理各自的类对象时,每个线程使用不同的非静态成员变量,使用的静态成员变量还是同一个
synchronized关键字
synchronized()括号中,不能添加基本数据类型,基本类型的封装类也不能,可以是对象
- synchronized(this):锁住当前线程对象
- synchronized(类成员变量):锁住类成员变量,使线程只能排队拿到该成员变量