方式一:public class MyThread extends Thread{
@override
public void run(){
for(int i=0;i<100;i++){
System.our.println(i);
}
}
}
public class MyTest{
public static void main(String[] args){
MyThread myThread=new MyThread();
myThread.start();
方式二:实现Runnable接口
方式三:实现Callable接口 在主方法里new MyCallable()
new FutureTask<>(myCallable);
new Thread(task)
synchronized的缺陷:
当某个线程进入同步方法获得对象锁,那么其他线程访问这里对象的同步方法时,必须等待或者阻塞,这对高并发的系统是致命的,这很容易导致系统的崩溃。如果某个线程在同步方法里面发生了死循环,那么它就永远不会释放这个对象锁,那么其他线程就要永远的等待。这是一个致命的问题。
相比同步方法,一般采用同步代码块。
这是因为同步代码块里被锁的内容更少,效率相对更高一些。