java的多线程劣势_1 多线程的优缺点

本文探讨了Java中多线程的创建方式,包括继承Thread、实现Runnable和Callable接口。通过示例展示了多线程可能并不总是提高计算性能,并通过《java并发编程的艺术》中的例子解释了上下文切换的开销。此外,还提到了线程安全问题,如死锁,并给出了死锁的必要条件。最后,讨论了线程的状态转换、中断、join方法、sleep与wait的区别,以及守护线程的概念。
摘要由CSDN通过智能技术生成

之前写的都乱糟糟的,现在也需要重新记忆一遍。所以重新整理一下JUC包。

多线程及其优缺点

什么是线程

是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。(wiki百科)

创建线程的三种方式

public class ThreadTest {

public static void main(String[] args) throws InterruptedException {

//1、继承Thread方式

Thread thread1 = new Thread(){

@Override

public void run() {

System.out.println("thread1 start");

}

};

thread1.start();

//2、实现Runnable接口

Thread thread2 = new Thread(new Runnable() {

@Override

public void run() {

System.out.println("thread2 start");

}

});

thread2.start();

//3、实现Callable接口

ExecutorService executorService = Executors.newSingleThreadExecutor();

Future future = executorService.submit(new Callable() {

@Override

public String call() throws Exception {

return "future start";

}

});

try {

String result = future.get();

System.out.println(result);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}

}

在jdk8之后用lambda表达式转换一下

public class ThreadTest {

public static void main(String[] args) throws InterruptedException {

//1、继承Thread方式

Thread thread1 = new Thread(() -> System.out.println("thread1 start"));

thread1.start();

//2、实现Runnable接口

Thread thread2 = new Thread(() -> System.out.println("thread2 start"));

thread2.start();

//3、实现Callable接口

ExecutorService executorService = Executors.newSingleThreadExecutor();

Future future = executorService.submit(() -> "future start");

try {

String result = future.get();

System.out.println(result);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}

}

简化了一点,但是更多是有点懵,lambda为什么会简化方法,->是怎么找到对应的方法,下次在研究。

为什么要用多线程

早期的CPU是单核的,为了提升计算能力,将多个计算单元整合到一起。形成了多核CPU。多线程就是为了将多核CPU发挥到极致,一边提高性能。

多线程缺点呢

上面说了多线程的有点是:为了提高计算性能。那么一定会提高?

答案是不一定的。有时候多线程不一定比单线程计算快。引入《java并发编程的艺术》上第一个例子

public class ConcurrencyTest {

/** 执行次数 */

private static final long count = 10000l;

public static void main(String[] args) throws InterruptedException {

//并发计算

concurrency();

//单线程计算

serial();

}

private static void concurrency() throws InterruptedException {

long start = System.currentTimeMillis();

Thread threa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值