1.多线程
1.两种实现方式:继承Thread,实现Runnable接口,但都要重写run方法
2.多个对象可同时开启线程,但一个对象不可重复开启线程
3.对象单独调用run方法还是在主线程上,而调用start开启了一个新线程
4.线程命名:setName(“”); 线程的调度优先级 setPriority()默认值是5,区间1-10
5.Thread.currentThread().getName(), this.getName();
线程安全问题:
1.用锁synchronized锁上
A.同步代码块时: 在这里,对象如果是同一个,安全,不是同一个则不安全
Object obj=new Object();
synchronized(对象obj){
代码;
}
B.静态同步方法:在这里,对象是类的字节码对象MyThread.class
public static synchronized void sellTicket(类的字节码对象) {
需要同步的代码
}
C.同步方法:仅适用于实现runable接口
public synchronized void sellTicket(this){
同步代码
}
匿名内部类:
方式1:
new Thread(){
//重写的方法
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println(i);
}
}
}.start();
方式2
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println(i);
}
}
}).start();
Sleep wait 的不同?
sleep在一定时间后自动唤醒,wait需要手动唤醒
锁对象.notify