Java多线程的使用
2014-04-20 21:31
232 查看
在学习多线程之前我们应该先明确三个问题:
①、什么是线程?
答:当一个程序运行时(进程),内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
②、线程、进程的关系与不同?
答:线程又称轻量级进程,一个进程中可以包含多个线程。从资源分配角度考虑,进程是系统进行资源分配和调度的一个独立单位,线程则是共享父进程中的全部资源。
③、多线程的作用?
答:多线程可以使程序具有并发性,即同一时间间隔内,线程可以被依次执行,但效果像同时执行一样。
线程的创建形式一共有三种:
1、继承Thread类创建线程类。
运行效果图
2、实现Runnable接口创建线程类。
运行效果图
3、使用Callable和Future创建线程。
运行效果图
通过继承Thread类或实现Runnable、Callable接口都可以实现多线程,不过实现Runnable接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法有返回值,可以声明抛出异常而已。因此可以将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式之间的主要差别如下:
1、实现Runnable、Callable接口的方式创建多线程:
①、线程类只是实现了Runnable接口和Callable接口,还可以继承其他类。
②、多个线程共享一个target对象,所以非常适合多个线程来处理同一份资源的情况。
2、采用继承Thread类的方式创建多线程:
①、线程类以继承了Thread类,所以不能继承其他父类。
②、每个线程都是一个独立的对象,适合处理不共享资源的情况。
以上便是线程的使用,根据我们的需求,选择一个中肯的方法创建我们所需的线程。
①、什么是线程?
答:当一个程序运行时(进程),内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
②、线程、进程的关系与不同?
答:线程又称轻量级进程,一个进程中可以包含多个线程。从资源分配角度考虑,进程是系统进行资源分配和调度的一个独立单位,线程则是共享父进程中的全部资源。
③、多线程的作用?
答:多线程可以使程序具有并发性,即同一时间间隔内,线程可以被依次执行,但效果像同时执行一样。
线程的创建形式一共有三种:
1、继承Thread类创建线程类。
//通过继承Thread类来创建线程类 public class MyThread extends Thread { //线程共享资源(计数变量) private int count; @Override public void run() { for(;count<100;count++){ System.out.println(getName() + " " + count); } } public static void main(String[] args) { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName() + " " + i); if(i == 20) { //创建并启动第一个线程 new MyThread().start(); //创建并启动第二个线程 new MyThread().start(); } } } }
运行效果图
2、实现Runnable接口创建线程类。
//通过实现Runnable接口来创建线程类 public class MyThread implements Runnable { //线程共享资源(计数变量) private int count; @Override public void run() { for (; count < 100; count++) { System.out.println(Thread.currentThread().getName() + " " + count); } } public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 20) { MyThread mt = new MyThread(); // 通过new Thread(target , name)方法创建新线程 new Thread(mt, "线程1").start(); new Thread(mt, "线程2").start(); } } } }
运行效果图
3、使用Callable和Future创建线程。
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; //实现Callable接口来实现线程类 public class MyThread implements Callable<Integer> { private int count; //实现call方法,作为线程执行体 @Override public Integer call() throws Exception { for(;count<100;count++) { System.out.println(Thread.currentThread().getName() + " " +count); } //call()方法可以有返回值 return count; } public static void main(String[] args) { //创建Callable对象 MyThread mt = new MyThread(); //使用FutureTask来包装Callable对象 FutureTask<Integer> task1 = new FutureTask<Integer>(mt); FutureTask<Integer> task2 = new FutureTask<Integer>(mt); for(int i=0;i<100;i++) { System.out.println(Thread.currentThread().getName() + " " + i); if(i == 20) { //实质还是以Callable对象来创建并启动线程 new Thread(task1,"有返回值的线程1").start(); new Thread(task2,"有返回值的线程2").start(); } } try { //获取线程的返回值 System.out.println("子线程的返回值:" + task1.get()); } catch(Exception e) { e.printStackTrace(); } } }
运行效果图
通过继承Thread类或实现Runnable、Callable接口都可以实现多线程,不过实现Runnable接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法有返回值,可以声明抛出异常而已。因此可以将实现Runnable接口和实现Callable接口归为一种方式。这种方式与继承Thread方式之间的主要差别如下:
1、实现Runnable、Callable接口的方式创建多线程:
①、线程类只是实现了Runnable接口和Callable接口,还可以继承其他类。
②、多个线程共享一个target对象,所以非常适合多个线程来处理同一份资源的情况。
2、采用继承Thread类的方式创建多线程:
①、线程类以继承了Thread类,所以不能继承其他父类。
②、每个线程都是一个独立的对象,适合处理不共享资源的情况。
以上便是线程的使用,根据我们的需求,选择一个中肯的方法创建我们所需的线程。
相关文章推荐
- Java多线程--并发中集合的使用之LinkedBlockingQueue
- java多线程-使用notify和wait完成多线程的顺序执行
- java多线程-使用notify和wait完成多线程的顺序执行
- java多线程(十)使用线程安全的集合
- Java多线程、并发时使用Synchronized(同步锁)解决资源竞争问题
- java多线程使用总结
- Java多线程(7)——ExecutorService 的理解与使用
- 使用Java多线程实现任务分发
- Java多线程之原子操作atomic的使用CAS(七)
- java多线程编程之使用Synchronized关键字同步类方法
- Java多线程之Lock的使用
- java多线程的使用
- java多线程-使用notify和wait完成多线程的顺序执行
- java多线程-使用notify和wait完成多线程的顺序执行
- Java多线程-基本使用
- Java多线程中的interrupt方法的使用
- Java多线程:join使用及原理
- 使用Java多线程实现任务分发
- java多线程(1)_正确使用Condition实现等待通知
- Java多线程中读写锁ReadWriteLock的使用