您的位置:首页 > 编程语言 > Java开发

Java线程学习(一)

2016-05-20 23:46 323 查看
线程的好处:

1、线程是一种轻量级的进程,并且创建一个线程花费的时间和资源都很少

2、线程共享它父级进程 的数据和代码

3、线程的切换通常比两个进程之间的切换花费的更少

4、线程间的通讯比进程间更容易。

java提供了两种方法去创建线程

1、实现Runnable(java.lang.Runnable)接口

2、继承Thread(java.lang.Thread)类

在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。

Thread构造函数:

public Thread( );

public Thread(Runnable target);

public Thread(String name);

public Thread(Runnable target, String name);

public Thread(ThreadGroup group, Runnable target);

public Thread(ThreadGroup group, String name);

public Thread(ThreadGroup group, Runnable target, String name);

public Thread(ThreadGroup group, Runnable target, String name, long stackSize);

public class Demo1 implements Runnable
{
@Override
public void run()
{
System.out.println("Doing heavy processing - START "+Thread.currentThread().getName());
try
{
Thread.sleep(1000);
doDbProcess();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("Doing heavy processing - END "+Thread.currentThread().getName());
}
private void doDbProcess() throws InterruptedException
{
Thread.sleep(2000);
}
}

public class Demo extends Thread
{
public Demo(String name)
{
super(name);
}

@Override
public void run()
{
System.out.println("Demo - START "+Thread.currentThread().getName());
try
{
Thread.sleep(1000);
doDbProcess();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("Demo - END "+Thread.currentThread().getName());
}

private void doDbProcess()
throws InterruptedException
{
Thread.sleep(2000);
}
}

public class TestThread
{

public static void main(String[] args)
{
Thread t1 = new Thread(new Demo1(), "t1");
Thread t2 = new Thread(new Demo1(), "t2");
System.out.println("Starting Runnable threads");
t1.start();
t2.start();
System.out.println("Runnable Threads has been started");
Thread t3 = new Demo("t3");
Thread t4 = new Demo("t4");
System.out.println("Starting Demo Thread threads");
t3.start();
t4.start();
System.out.println("Demo Threads has been started");
}
}


运行结果:

Starting Runnable threads

Runnable Threads has been started

Doing heavy processing - START t2

Starting Demo Thread threads

Doing heavy processing - START t1

Demo - START t3

Demo Threads has been started

Demo - START t4

Doing heavy processing - END t1

Doing heavy processing - END t2

Demo - END t3

Demo - END t4

线程VS进程

1、如果你的类提供了更多的功能,而不仅仅作为线程运行,你应该实现Runnable接口提供一种方式来运行它的线程。如果您的类唯一的目标就是为线程运行,可以扩展Thread类。

2、实现Runnable是首选,因为Java支持实现多个接口。如果扩展Thread类,不能扩展任何其他类。

参考资料http://www.journaldev.com/1016/java-thread-example-extending-thread-class-and-implementing-runnable-interface

线程的休眠:

Java线程休眠 用于暂停当前执行的线程。

线程休眠提供了两种方法:

一、sleep(long millis)。 线程休眠millis毫秒

二、sleep(long millis, int nanos)。 线程休眠millis毫秒+nanos纳秒

重点:

1、睡眠的总是当前执行的线程

2、线程在被唤醒之前是处于睡眠状态,开始执行依赖于系统的计时器和调度程序,对于一个安静的系统,睡眠时间接近于指定的睡眠时间,而对于一个繁忙的系统睡眠时间可能略大于指定的时间

3、睡眠的线程不会失去当前线程获得的任何监视器或锁

4、任何其他线程可中断当前睡眠线程,在这种情况下InterruptedException异常被抛出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程