java多线程:多线程(一)
2015-08-28 19:19
633 查看
一、多线程理解
多线程机制,多线程允许在程序中并发执行多个指令,每个指令完成的任务即是一个线程。
不管是进程,线程还是多线程的完成必然依靠操作系统的调度完成,对于线程来说,线程是从属于进程的,多线程之间共享一个存储空间,由此也产生了线程中线程同步以及资源争夺导致的死锁问题,当然预防和解决都会在后续总结中解决。
何时需要多线程
1、程序需要同时执行两个或多个任务(需要或者为了提高程序运行效率)
2、程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等
3、需要一些后台运行的程序时。等等
二、java多线程创建
java中提供了Thread类来创建线程,我们可以通过两种方法来创建:
1、继承
Thread 类,重写方法run()
2、实现
Runnable 接口,及其run()方法
具体看代码实现:
1、继承 Thread 类,重写run()方法
main
线程
如上,我们通过继承Thread类,通过重写run()方法定义了一个新的线程类MyThread,其中run()方法的方法体代表了线程需要完成的任务,称之为线程执行体。当创建此线程类对象时一个新的线程得以创建,并进入到线程新建状态。通过调用线程对象引用的start()方法,使得该线程进入到就绪状态,此时此线程并不一定会马上得以执行,这取决于CPU调度时机。
2、实现 Runnable 接口,及其run()方法
main
线程
说明:在Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。
对比继承和实现:
继承中我们看其实现方式:
而实现呢:
继承的方式是多个线程分别完成自己的任务,实现的方式是多个线程共同完成一个任务。
三、总结
在java中是不支持多继承,所以当我们通过继承Thread类的方法来实现线程后,这个类就不能再去继承其他的类了。所以通常的线程通过实现Runnable接口的方式实现。
多线程机制,多线程允许在程序中并发执行多个指令,每个指令完成的任务即是一个线程。
不管是进程,线程还是多线程的完成必然依靠操作系统的调度完成,对于线程来说,线程是从属于进程的,多线程之间共享一个存储空间,由此也产生了线程中线程同步以及资源争夺导致的死锁问题,当然预防和解决都会在后续总结中解决。
何时需要多线程
1、程序需要同时执行两个或多个任务(需要或者为了提高程序运行效率)
2、程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等
3、需要一些后台运行的程序时。等等
二、java多线程创建
java中提供了Thread类来创建线程,我们可以通过两种方法来创建:
1、继承
Thread 类,重写方法run()
2、实现
Runnable 接口,及其run()方法
具体看代码实现:
1、继承 Thread 类,重写run()方法
main
public class ThreadTest { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 30) { Thread myThread1 = new MyThread(); // 创建一个新的线程 myThread1 此线程进入新建状态 Thread myThread2 = new MyThread(); // 创建一个新的线程 myThread2 此线程进入新建状态 myThread1.start(); // 调用start()方法使得线程进入就绪状态 myThread2.start(); // 调用start()方法使得线程进入就绪状态 } } } }
线程
class MyThread extends Thread { private int i = 0; @Override public void run() { for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
如上,我们通过继承Thread类,通过重写run()方法定义了一个新的线程类MyThread,其中run()方法的方法体代表了线程需要完成的任务,称之为线程执行体。当创建此线程类对象时一个新的线程得以创建,并进入到线程新建状态。通过调用线程对象引用的start()方法,使得该线程进入到就绪状态,此时此线程并不一定会马上得以执行,这取决于CPU调度时机。
2、实现 Runnable 接口,及其run()方法
main
public class ThreadTest { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 30) { Runnable myRunnable = new MyRunnable(); // 创建一个Runnable实现类的对象 Thread thread1 = new Thread(myRunnable); // 将myRunnable作为Thread target创建新的线程 Thread thread2 = new Thread(myRunnable); thread1.start(); // 调用start()方法使得线程进入就绪状态 thread2.start(); } } } }
线程
class MyRunnable implements Runnable { private int i = 0; @Override public void run() { for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
说明:在Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。
对比继承和实现:
继承中我们看其实现方式:
Thread myThread1 = new MyThread(); // 创建一个新的线程 myThread1 此线程进入新建状态 Thread myThread2 = new MyThread(); // 创建一个新的线程 myThread2 此线程进入新建状态 myThread1.start(); // 调用start()方法使得线程进入就绪状态 myThread2.start();创建了两个线程类,分别去执行线程。
而实现呢:
Runnable myRunnable = new MyRunnable(); // 创建一个Runnable实现类的对象 Thread thread1 = new Thread(myRunnable); // 将myRunnable作为Thread target创建新的线程 Thread thread2 = new Thread(myRunnable); thread1.start(); // 调用start()方法使得线程进入就绪状态 thread2.start();只创建了一个线程类,然后分成两个线程去执行。
继承的方式是多个线程分别完成自己的任务,实现的方式是多个线程共同完成一个任务。
三、总结
在java中是不支持多继承,所以当我们通过继承Thread类的方法来实现线程后,这个类就不能再去继承其他的类了。所以通常的线程通过实现Runnable接口的方式实现。
相关文章推荐
- java继承
- Java中的字符串常量池与Java中的堆和栈的区别
- 如何将android studio项目转换成eclipse
- java多线程使用学习笔记
- maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
- javascipt和DOM
- java.lang.reflect.Invocation TargetException异常
- java在给定范围内生成给定数量的随机数
- 用el表达式和Struts2 分别获取url请求的参数
- leetcode String to Integer (atoi) java基本编程学习(二)
- java读取Excel指定格式的数据
- Java Swing 字体居中显示
- java 生成文字图片
- java集合框架系列-WeakHashMap介绍
- Spring的AOP配置 第一个AOP例子
- Eclipse反编译工具Jad及插件JadClipse配置
- Java RandomAccessFile用法
- java内存管理(堆和栈)
- JAVA的solr操作实现(基本操作)
- java操作solr实现索引,查询,删除,拼写检查等功能