Java多线程的使用
来源:互联网 发布:windows版icloud 编辑:程序博客网 时间:2024/05/22 08:29
在学习多线程之前我们应该先明确三个问题:
①、什么是线程?
答:当一个程序运行时(进程),内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
②、线程、进程的关系与不同?
答:线程又称轻量级进程,一个进程中可以包含多个线程。从资源分配角度考虑,进程是系统进行资源分配和调度的一个独立单位,线程则是共享父进程中的全部资源。
③、多线程的作用?
答:多线程可以使程序具有并发性,即同一时间间隔内,线程可以被依次执行,但效果像同时执行一样。
线程的创建形式一共有三种:
1、继承Thread类创建线程类。
//通过继承Thread类来创建线程类public class MyThread extends Thread {//线程共享资源(计数变量)private int count;@Overridepublic 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;@Overridepublic 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方法,作为线程执行体@Overridepublic 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多线程的使用
- Java多线程的使用
- Java多线程的使用
- Java多线程的使用
- Java多线程的使用
- JAVA---多线程的使用
- Java多线程的使用
- java多线程的使用
- java多线程的使用
- java多线程的使用
- Java -- 多线程的使用
- JAVA多线程的使用
- java多线程的使用
- Lock的使用 java多线程
- java多线程 join的使用
- JAVA实验 多线程的使用
- Java(多线程的使用)
- Java中多线程的使用
- spring 总结
- 异步与多线程的区别
- Python学习笔记——第四章 字典
- 图的邻接表表示及遍历
- Go语言 Go的网络轮询及IO机制
- Java多线程的使用
- 一个最简单的google map页面
- 条件控制语句
- 数据库事物
- php 分页 【3种形式】
- 软件设计与结构化设计方法
- 随机洗牌算法
- 菜鸟调错(三)——Jboss与jdk版本不兼容导致WebService调用出错
- 聚集索引与非聚集索引【待理解】