线程run和start问题

  1. /***

  2. * 1.只有start()才真正实现了多线程运行。<br>

  3. * 这时无需等待run方法体代码执行完毕,不同线程的run()方法交替执行;<br>

  4. * 通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。<br>

  5. * 然后通过此Thread类调用方法run()来完成其运行操作的, <br>

  6. * 这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。 <br>

  7. * <br>

  8. * <br>

  9. * 2.如果只是调用run()方法那么程序还是同步执行。<br>

  10. * 程序还是要顺序执行,要等待一个run()执行完毕后,才可继续执行下面的代码;<br>

  11. * 程序执行路径还是只有一条, 这样就没有达到写线程的目的。

  12. */

 

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结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值