-
/***
-
* 1.只有start()才真正实现了多线程运行。<br>
-
* 这时无需等待run方法体代码执行完毕,不同线程的run()方法交替执行;<br>
-
* 通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。<br>
-
* 然后通过此Thread类调用方法run()来完成其运行操作的, <br>
-
* 这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。 <br>
-
* <br>
-
* <br>
-
* 2.如果只是调用run()方法那么程序还是同步执行。<br>
-
* 程序还是要顺序执行,要等待一个run()执行完毕后,才可继续执行下面的代码;<br>
-
* 程序执行路径还是只有一条, 这样就没有达到写线程的目的。
-
*/
package lock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author lenovo
* @date 2018/9/29 11:33
*/
public class LockDemo {
private Lock lock = new ReentrantLock();
public void method(Thread thread) {
lock.lock();
try {
System.out.println("线程名:"+thread.getName()+"获得了锁");
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("线程名:"+thread.getName() + "释放了锁");
lock.unlock();
}
}
public static void main(String[] args) {
LockDemo lockDemo = new LockDemo();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
//lockDemo.method(Thread.currentThread());
System.out.println(1);
}
},"t1");
// 线程2
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(2);
// lockDemo.method(Thread.currentThread());
System.out.println(2);
}
}, "t2");
thread.start();
t2.start();
}
}
个人觉得 就是调用start的两个线程的run方法体的执行内容会随机交叉进行
直接调用run方法执行内容就会根据书写顺序,有顺序的执行
调用run会顺序的执行每个线程前面线程内容不执行完不执行下一个线程 这是由于它们在同一线程钟
调用start会各自创建自己的线程,自己管自己的,随机执行交叉执行,这是由于start会创建线程
run结果
start结果