java多线程简单学习

简介: java多线程简单学习

什么是进程什么是线程


一个多核主机 可以产生 多个进程 ,一个进程可以产生多个线程

线程是比进程更小粒度

共享代码区以及段基址

相互之间可以访问彼此的存储空间

进程之间完全隔绝

必须通过操作系统来实现通信功能


java多线程类 Thread

我们使用这个类可以来实现我们自己的多线程

在这里插入代码片//重载多线程
class MyThread extends  Thread{
    String title;
    public MyThread(String title){
        this.title=title;
    }
//    具体实现多线程
    public void run(){
        for (int i  =  0; i < 10 ; i++) {
            String a1=this.title+"  "+ i;
            a1= i==9? a1+"\n" : a1;
            System.out.println(a1);
        }
    }
}
public class manyThread {
    public static void main(String a[]){
//        run方法执行效果
        new MyThread("run效果线程A").run();
        new MyThread("run效果线程B").run();
        new MyThread("run效果线程C").run();
//        start方法执行效果
        new MyThread("start效果线程A").start();
        new MyThread("start效果线程B").start();
        new MyThread("start效果线程C").start();
    }
}


对比是否开启多线程的运行效果

不启用多线程 启用多线程
run效果线程A 0 start效果线程A 0
run效果线程A 1 start效果线程C 0
run效果线程A 2 start效果线程B 0
run效果线程A 3 start效果线程C 1
run效果线程A 4 start效果线程A 1
run效果线程A 5 start效果线程C 2
run效果线程A 6 start效果线程B 1
run效果线程A 7 start效果线程B 2
run效果线程A 8 start效果线程C 3
run效果线程A 9 start效果线程A 2
start效果线程A 3
run效果线程B 0 start效果线程C 4
run效果线程B 1 start效果线程B 3
run效果线程B 2 start效果线程A 4
run效果线程B 3 start效果线程C 5
run效果线程B 4 start效果线程B 4
run效果线程B 5 start效果线程C 6
run效果线程B 6 start效果线程A 5
run效果线程B 7 start效果线程C 7
run效果线程B 8 start效果线程B 5
run效果线程B 9 start效果线程C 8
start效果线程A 6
run效果线程C 0 start效果线程C 9
run效果线程C 1
run效果线程C 2 start效果线程B 6
run效果线程C 3 start效果线程A 7
run效果线程C 4 start效果线程B 7
run效果线程C 5 start效果线程A 8
run效果线程C 6 start效果线程B 8
run效果线程C 7 start效果线程A 9
run效果线程C 8
run效果线程C 9 start效果线程B 9


所以我们一定要使用start 启用多线程

继承Thread 造成的单继承局限

我们知道在java中实现 类是单继承的,所以当我们需要多继承的多线程时该怎么处理呢

采用接口克服单继承局限

class  MyThread implements Runnable{
    String title ;
    MyThread(String title){
        this.title=title;
    }
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(this.title+"运行"+i);
            if (i==9) System.out.println("\n");
        }
    }
}
public class InterfaceThread {
    public static void main(String a[])
    {
        for (int i = 0; i < 3; i++) {
            MyThread mt=new MyThread("线程a"+i);
            new Thread(mt).start();
        }
    }
}


lambda实现多线程

代码很精简

public class lambdaThread {
    public static void main(String a[])
    {
        for (int i = 0; i < 3; i++) {
            String title="线程-"+(i+1);
            Runnable run =()->{
                for (int j = 0; j < 10; j++) {
                    System.out.println(title+"运行"+j);
                    if (j==9) System.out.println("\n");
                }
            };
            new Thread(run).start();
        }
    }
}

callable多线程带返回值

java.util.concurrent.callable

可以满足多线程需要返回值的场景

相关文章
|
3天前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。
|
2天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
3天前
|
设计模式 消息中间件 算法
【实习总结】Java学习最佳实践!
【实习总结】Java学习最佳实践!
22 3
|
3天前
|
数据采集 安全 Java
Java并发编程学习12-任务取消(上)
【5月更文挑战第6天】本篇介绍了取消策略、线程中断、中断策略 和 响应中断的内容
30 4
Java并发编程学习12-任务取消(上)
|
1天前
|
存储 安全 Java
Java多线程基础知识总结,36岁老码农现身说法
Java多线程基础知识总结,36岁老码农现身说法
|
1天前
|
Java 测试技术
Java多线程的一些基本例子
【5月更文挑战第17天】Java多线程允许并发执行任务。示例1展示创建并启动两个`MyThread`对象,各自独立打印&quot;Hello World&quot;。示例2的`CounterExample`中,两个线程(IncrementThread和DecrementThread)同步地增加和减少共享计数器,确保最终计数为零。这些例子展示了Java线程的基本用法,包括线程同步,还有如Executor框架和线程池等更复杂的用例。
9 0
|
2天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
2天前
|
Java
阅读《代码整洁之道》总结(1),java多线程面试
阅读《代码整洁之道》总结(1),java多线程面试
|
3天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第15天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将通过实例分析,理解线程安全的重要性,并学习如何通过各种技术和策略来实现它。同时,我们也将探讨如何在保证线程安全的同时,提高程序的性能。
|
3天前
|
消息中间件 并行计算 Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第15天】 在现代计算机编程中,多线程是一个复杂但必不可少的概念。特别是在Java这种广泛使用的编程语言中,理解并掌握多线程编程是每个开发者必备的技能。本文将深入探讨Java中的多线程编程,从基础概念到实际应用场景,为读者提供全面的理论支持和实践指导。