Java之线程编程的4种方法实现案例讲解

1、继承Thread

public class T4 {
	public static void main(String[] args) {
		System.out.println(Thread.currentThread());
		Thread t1 = new A1();
		t1.start();
	}
}
class A1 extends Thread{
	@Override
	public void run() {
		for(int i=0;i<10;i++) {
			System.out.println("Thread:"+Thread.currentThread().getName());
		}
	}
}

2、实现Runnable接口

public class T3 {
	public static void main(String[] args) {
		System.out.println("Thread:"+Thread.currentThread().getName());
		Thread t1 = new Thread(new A2());
		t1.start();
	}

}
class A2 implements Runnable{
	@Override
	public void run() {
		int res =0;
		for(int i=0;i<10;i++) {
			res+=i;
		System.out.println("Thread:"+Thread.currentThread().getName());
		}
	}
}

3、使用Callable和Future接口创建线程

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class T2 {
	public static void main(String[] args) throws Exception {
		System.out.println("Test3:" + Thread.currentThread().getName());
		Callable c = new A4();
		FutureTask ft = new FutureTask(c);
		Thread t1 = new Thread(ft);
		t1.start();
		Object res = ft.get();
		System.out.println("结果:" + res);
	}
}
class A4 implements Callable {
	@Override
	public Object call() throws Exception {
		int res = 0;
		for (int i = 0; i < 10; i++) {
			res += i;
			System.out.println("Thread:" + Thread.currentThread().getName());
		}
		return res;
	}
}

4、使用线程池创建线程

享元模式
享元模式Flyweight Pattern主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于 结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式
优点:大大减少对象的创建,降低系统内存的使用,以提高程序的执行效率。
缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部 状态的变化而变化,否则会造成系统的混乱。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class T1 {
	public static void main(String[] args) throws Exception {
		Future[] arr = new Future[5];
		ExecutorService es = Executors.newFixedThreadPool(3);
		for (int i = 0; i < 5; i++) {
			arr[i] = es.submit(new A4());
		}
		for (Future f : arr) {
			Object res = f.get();
			System.out.println("结果为:" + res);
		}
		es.shutdown();
	}
}

class A4 implements Callable {
	@Override
	public Object call() throws Exception {
		int res = 0;
		for (int i = 0; i < 10; i++) {
			res += i;
			System.out.println("Thread" + Thread.currentThread().getName());
		}
		return res;
	}
}

到此这篇关于Java之线程编程的4种方法实现案例讲解的文章就介绍到这了,更多相关Java之线程编程的4种方法实现内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java并发编程面试之线程池

    目录 什么是线程池 线程池好处 线程池的执行流程 怎么用线程池 corePoolSize maximumPoolSize keepAliveTime unit workQueue threadFactory ejectedExecutionHandler 线程池参数如何设置? 监控线程池 总结 什么是线程池 是一种基于池化思想管理线程的工具.池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需.比如我们的对象池,数据库连接池等. 线程池好处 我们为什么要使用线程池,直接new th

  • 很多人竟然不知道Java线程池的创建方式有7种

    目录 前言 什么是线程池? 线程池使用 1.FixedThreadPool 2.CachedThreadPool 3.SingleThreadExecutor 4.ScheduledThreadPool 5.SingleThreadScheduledExecutor 6.newWorkStealingPool 7.ThreadPoolExecutor 线程池的执行流程 线程拒绝策略 自定义拒绝策略 究竟选用哪种线程池? 前言 根据摩尔定律所说:集成电路上可容纳的晶体管数量每 18 个月翻一番,因

  • Java多线程通信问题深入了解

    目录 概述 引入 加入线程安全 实现生产者与消费者问题 总结 概述 多线程通信问题,也就是生产者与消费者问题 生产者和消费者为两个线程,两个线程在运行过程中交替睡眠,生产者在生产时消费者没有在消费,消费者在消费时生产者没有在生产,确保数据安全 以下为百度百科对于该问题的解释: 生产者与消费者问题: 生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了两个共享固定大小缓

  • 一篇文中细看Java多线程的创建方式

    前言 Java现在有四种创建的方式:继承Threa类.实现Runnable接口.实现Callable接口.线程池 Thread.Runnable都在java.lang包下:Callable.线程池都在java.util.concurrent包下 1.继承Thread类,重写run方法 创建一个类继承Thread类,并重写run():因为run()是线程具体执行的方法. 在测试类或者main()创建Thread对象,并调用start()启动线程 备注:start()是启动线程,run()是线程执行

  • Java多线程深入理解

    目录 线程 Thread类 Runnable接口创建线程 Thread和Runnable的区别 匿名内部类方式实现线程的创建 线程安全 线程安全 线程同步 同步方法 Lock锁 线程状态 等待唤醒机制 线程间通信 等待唤醒机制 生产者与消费者问题 线程池 线程池的概念 线程池的使用 总结 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU

  • Java多线程:生产者与消费者案例

    目录 前言 工具 知识点 设计思路 具体步骤 总结 前言 想象一下生活中哪些是和线程沾边的?饭店炒菜就是一个很好的例子 首先客人要吃菜,前提是厨师要炒好,也就是说,厨师不炒好的话客人是没有饭菜的.这时候,厨师就是一个线程,客人拿菜就是另一个线程. 工具 jdk13,IDEA2019.1.4 知识点 Thread.Runnable.synchronized.面向对象知识(继承.封装.接口.方法重写).条件判断以及线程的一些其他知识点 设计思路 首先要有两个线程,也就是说要两个类,分别是Produc

  • 一篇文章带你深入了解Java线程池

    目录 线程池模型 常用线程池 ThreadPoolExecutor 构造函数参数说明 线程池默认工作行为 ForkJoinPool FutureTask 线程数量分析 CPU密集型 IO密集型 总结 线程池模型 一般的池化模型会有两个方法,用于获取资源和释放资源,就像这样: public interface XXPool{ XX acquire(); void release(); } 但是,工程中的线程池一般是生产者和消费者模型,线程池是消费者,任务的提交者是生产者,下面是一个简化的线程池模型

  • Java之线程编程的4种方法实现案例讲解

    1.继承Thread public class T4 { public static void main(String[] args) { System.out.println(Thread.currentThread()); Thread t1 = new A1(); t1.start(); } } class A1 extends Thread{ @Override public void run() { for(int i=0;i<10;i++) { System.out.println(

  • 创建Java线程安全类的七种方法

    目录 前言 无状态 没有共享状态 消息传递 不可变状态 使用来自 java.util.concurrent 的数据结构 同步块 易失性领域 总结 前言 几乎每个 Java 应用程序都使用线程.像 Tomcat 这样的 Web 服务器在单独的工作线程中处理每个请求,胖客户端在专用工作线程中处理长时间运行的请求,甚至批处理使用 java.util.concurrent.ForkJoinPool 来提高性能. 因此,有必要以线程安全的方式编写类,这可以通过以下技术之一来实现. 无状态 当多个线程访问同

  • Java 多线程有序执行的几种方法总结

    Java 多线程有序执行的几种方法总结 同事无意间提出了这个问题,亲自实践了两种方法.当然肯定还会有更多更好的方法. 方法一 import java.util.concurrent.atomic.AtomicInteger; public class OrderedThread1 { static AtomicInteger count = new AtomicInteger(0); public static void main(String[] args) throws Interrupte

  • java检查服务器的连通两种方法代码分享

    首先要了解一下ping的内容. 概述 PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序.Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议:回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答).它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:利用

  • C#线程同步的几种方法总结

    我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态:或者你的程序需要访问一些外部资源如数据库或网络文件等.这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题.如果这个问题处理不好,我们就会得到一些非预期的结果. 在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳. 一.volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的

  • Java中线程Thread的三种方式和对比

    介绍 多线程主要的作用就是充分利用cpu的资源.单线程处理,在文件的加载的过程中,处理器就会一直处于空闲,但也被加入到总执行时间之内,串行执行切分总时间,等于每切分一个时间*切分后字符串的个数,执行程序,估计等几分钟能处理完就不错了.而多线程处理,文件加载与差分过程中 一.Java实现多线程的三种方式 1.继承Thread 通过Thread继承,并重写run方法来实现多线程,案例如下: public class ThreadPattern extends Thread { @Override p

  • Java中ArrayList同步的2种方法分享

    目录 方法一:使用Collections.synchronizedList()方法 方法2:使用CopyOnWriteArrayList 向量同步时为什么要使用arrayList? 前言: arrayList 的实现是默认不同步的.这意味着如果一个线程在结构上修改它并且多个线程同时访问它,它必须在外部同步.结构修改意味着从列表中添加或删除元素或显式调整后备数组的大小.改变现有元素的值不是结构修改. 有两种方法可以创建同步Arraylist: 1. Collections.synchronized

  • Java 开启多线程常见的4种方法

    目录 简介 1. 实现 Runnable 接口 2. 实现 Callable 接口 3. 继承 Thread 类 4. 匿名内部类的写法 简介 常见的4种使用线程的方法: 1实现 Runnable 接口: 2实现 Callable 接口: 3继承 Thread 类. 4匿名内部类的写法. 1. 实现 Runnable 接口 编写测试类RunnableDemo 实现 Runnable 接口,实现接口中的 run() 方法. public class RunnableDemo implements

  • Java的引用类型常用的四种方法

    目录 前言 强引用FinalReference 软引用SoftReference 弱引用weakReference 虚引用PhantomReference 前言 今天看代码看到有牵扯到弱引用的东西,就先稍微补一补Java的四种引用类型吧.Java为引用类型专门定义了一个类Reference,它是引用对象的抽象基类. 这个类定义了所有引用对象共有的操作. 由于这个类和垃圾收集器是息息相关的,这个类不能直接子类化. Reference有4个子类,分别为强引用FinalReference.软引用Sof

  • Java项目实现定时任务的三种方法

    目录 1 使用java.util.Timer 2 使用ScheduledExecutorService 3 使用Spring Task 总结 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTask,使用起来比较简单.其中 Timer 负责设定 TimerTask 的起始与间隔执行时间. TimerTask是一个抽象类,new的时候实现自己的 run 方法,然后将其丢给 Timer 去执行即可. 代码示例: import java.time.L

随机推荐