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);
运行结果:
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异常被抛出。
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异常被抛出。
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- C#实现终止正在执行的线程
- Java线程编程中的主线程讲解