Java 线程基础

标签: Java线程基础
11人阅读 评论(0) 收藏 举报
分类:

start()和run()的区别

start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。
run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!

通过下面的代码就可以验证上面的结论:

    static class MyThread extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println("Thread is running on :"+Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {

        MyThread myThread = new MyThread();
        myThread.run();

        myThread.start();
    }

打印结果:

Thread is running on :main
Thread is running on :Thread-0

sleep

sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。
重点是它不会释放线程锁,通过代码验证一下:

    public static Object object = new Object();

    static class MyThread extends Thread{

        @Override
        public void run() {
            super.run();

            synchronized (object) {
                for (int i = 0; i < 5; i++) {
                    System.out.println(Thread.currentThread().getName()+"=="+i);

                    if (i==4) {
                        try {
                            sleep(2*1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        Thread thread = new MyThread();
        Thread thread2 = new MyThread();

        thread.start();
        thread2.start();
    }

打印结果:

Thread-0==0
Thread-0==1
Thread-0==2
Thread-0==3
Thread-0==4
Thread-1==0
Thread-1==1
Thread-1==2
Thread-1==3
Thread-1==4

分析上面的代码,两个线程共同持有object对象锁,当thread线程打印到4时休眠两秒钟,但是这个时候它并没有释放object的对象锁,所以thread2 也并没有得到执行。

wait、notiy、notiyall

释放线程锁,必须使用在synchronized 代码块中

sleep 和wait的比较

1.wait()的作用是让当前线程由“运行状态”进入“等待(阻塞)状态”的同时,也会释放同步锁。而sleep()的作用是也是让当前线程由“运行状态”进入到“休眠(阻塞)状态”。
但是,wait()会释放对象的同步锁,而sleep()则不会释放锁。

2.wait是Object类的方法而sleep是Thread类的方法。

查看评论

线程基础:线程(2)——JAVA中的基本线程操作(上)

从这篇文章开始。我们介绍线程的工作原理。
  • yinwenjie
  • yinwenjie
  • 2016-01-05 17:35:10
  • 7023

线程基础:线程(4)——JAVA中的基本线程操作(下)

从这篇文章开始。我们介绍线程的工作原理。
  • yinwenjie
  • yinwenjie
  • 2016-01-14 12:47:12
  • 6202

【java SE基础】Java线程详解

Java线程详解 本文转载自http://www.cnblogs.com/riskyer/p/3263032.html Java线程:概念与原理 一、操作系统中线程和进程的概念 现在的操作系统...
  • fu_pengfei_love822
  • fu_pengfei_love822
  • 2016-05-22 23:47:00
  • 823

Java笔记 - 线程基础知识

进程是一个执行中程序的实例,是操作系统进行资源分配和调度的一个独立单元。线程是进程中一个单一的程序控制流,是 CPU 调度和分派的基本单元。进程在执行时拥有独立的内存空间,进程中的线程可以共享进程的内...
  • yanshazi
  • yanshazi
  • 2016-04-05 13:01:58
  • 2556

Java多线程完整版基础知识

Java多线程完整版基础知识 (翟开顺由厚到薄系列) 1.前言 线程是现代操作系统中一个很重要的概念,多线程功能很强大,java语言对线程提供了很好的支持,我们可以使用java提供的thread类很容...
  • T1DMzks
  • T1DMzks
  • 2016-07-13 00:39:53
  • 8781

java 线程 基础

  • 2013年01月06日 13:30
  • 419KB
  • 下载

Java 线程简介电子书

  • 2009年01月13日 01:39
  • 372KB
  • 下载

Java线程PDF

  • 2013年12月13日 00:44
  • 281KB
  • 下载

java线程基础

  • 2012年11月15日 18:31
  • 281KB
  • 下载

java基础 线程

  • 2011年11月21日 08:57
  • 673KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 1288
    积分: 311
    排名: 25万+