多线程一(从实战入门到原理分析)

这篇博客深入探讨了Java中的多线程,从线程和进程的概述开始,详细讲解了如何通过继承Thread类、实现Runnable接口以及Callable接口创建线程。还分析了Thread类的基本方法和多线程内存模型。此外,文章讨论了线程安全问题,包括synchronized和Lock的使用,并介绍了线程间通信、线程状态及其转换。最后,补充了同步工具类CountDownLatch和CyclicBarrier的应用。
摘要由CSDN通过智能技术生成

一:线程和进程

1.1:线程和进程的概述

1. 进程:是内存中运行的一个个软件(比如:QQ, 微信)。
2. 线程:进程内部的一个独立执行单元。堆空间共享,栈空间是独立。

1.2:并发和并行的概述

1. 并行:在一个时间点同时发生多个事件。
2. 并发:在同一个时间段同时发生多个事件。

二:多线程实现

2.1:继承Thread类

代码的具体实现

public class MyThread extends Thread{
	/*
	 * 利用继承中的特点 
	 * 将线程名称传递  进行设置
	 */
	public MyThread(String name){
		super(name);
	}
	/*
	 * 重写run方法
	 *  定义线程要执行的代码
	 */
	public void run(){		
		for (int i = 0; i < 20; i++) {
			//getName()方法 来自父亲
			System.out.println(getName()+i);
		}
	}
}
  
public class Demo {
    public static void main(String[] args) {
      	System.out.println("这里是main线程");
    	MyThread mt = new MyThread("小强");    	
    	mt.start();//开启了一个新的线程
    	for (int i = 0; i < 20; i++) {
			System.out.println("旺财:"+i);
		}
	}
}

2.2:实现Runnable接口

  1. 基本实现
public class MyRunnable implements Runnable{
	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
	}
}

public class Demo {
    public static void main(String[] args) {
        //创建自定义类对象  线程任务对象
        MyRunnable mr = new MyRunnable();
        //创建线程对象
        Thread t = new Thread(mr, "小强");
        t.start();
        for (int i = 0; i < 20; i++) {
            System.out.println("旺财 " + i);
        }
    }
}	
  1. 匿名内部类
public static void main(String[] args) {
   //使用匿名内部类方式创建Runnable实例
    Thread t1 = new Thread(new Runnable(){
        @Override
        public void run() {
            for (int i = 0; i < 1000; i++) {
                System.out.println("输出"+i);
            }
        }
    });
    t1.start();
    // lambda 表达式简化语法
    Thread t2 = new Thread(()->{
        for (int i = 0; i < 1000; i++) {
            System.out.println("输出"+i);
        }
    });
    t2.start();
}

2.3:实现Callable接口

/**
 * 实现Callable的接口
 * 实现一个带返回值的任务
 * @创建日期 2020/3/18 15:31
 **/
public class Thread03_create03 {
    public static void main(String[] args) {
        //FutureTask包装我们的任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值