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

作者:一只可爱的小狐狸 时间:2021-11-18 18:40:46 

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;
}
}

来源:https://blog.csdn.net/qq_45874107/article/details/113754912

标签:Java,线程
0
投稿

猜你喜欢

  • 为什么说HashMap线程不安全

    2022-08-05 22:01:23
  • 在unity脚本中控制Inspector面板的参数操作

    2023-07-22 11:39:58
  • 关于@Entity和@Table注解的用法详解

    2022-05-15 15:29:04
  • C#自定义控件实现TextBox禁止粘贴的方法

    2023-08-03 06:00:22
  • Android 操作excel功能实例代码

    2021-07-02 23:48:23
  • Java毕业设计实战之二手书商城系统的实现

    2022-03-21 14:06:20
  • 教你创建一个带诊断工具的.NET镜像

    2021-09-28 03:11:11
  • Spring Security Remember me使用及原理详解

    2023-10-28 04:59:56
  • java8 集合之Stack详解及实例

    2023-08-02 16:04:07
  • Android自定义View实现五子棋小游戏

    2022-05-18 14:56:59
  • Java 关于时间复杂度和空间复杂度的深度刨析

    2023-11-10 16:07:39
  • c#将list类型转换成DataTable方法示例

    2023-06-27 12:02:08
  • java对ArrayList排序代码示例

    2023-11-24 20:14:21
  • Java实现分页的前台页面和后台代码

    2021-07-22 17:10:04
  • java 中ArrayList与LinkedList性能比较

    2023-03-28 05:45:43
  • Android自定义viewgroup可滚动布局 GestureDetector手势监听(5)

    2023-06-17 23:15:48
  • mybatis 报错显示sql中有两个limit的解决

    2022-04-30 02:50:49
  • C#调用C++DLL传递结构体数组的终极解决方案

    2022-05-31 09:54:30
  • 详解JAVA中static的作用

    2021-12-05 09:13:47
  • Android开发微信APP支付功能的要点小结

    2023-02-22 12:34:20
  • asp之家 软件编程 m.aspxhome.com