多线程之线程实现,生命周期

  • 线程简介
  • 大体理解
    • 解决多任务问题,
      • 多线程 多条路径同时进行
    • 一个进程会有多个线程
      • 一个进程匹配一个程序
      • 一个进程中开辟多条路径就是多线程
    • 多线程相当于开辟了多条路,相互不影响
  • 进程与线程区别:
    • 操作系统—>进程—>线程
    • 进程
      • 资源分配的最小单位
      • 切换开销大
      • 有独立的代码跟数据空间
    • 线程
      • 调度跟执行的最小单位
      • 多个线程共享一个进程下的资源
      • 每个线程会有独立的运行栈和程序计数器(PC)
      • 切换开销小
  • 核心概念
    • 线程是独立的执行路径
    • 在程序运行时,即使自己没有创建线程,后台也会有多个线程
    • main()称为主线程,为系统入口点
    • 在一个进程中,开辟多个线程,线程运行由调度器安排
      • 调度器与操作系统紧密连接,顺序人为无法控制
    • 同一份资源操作时,会存在资源抢夺问题,需要有并发控制
    • 主内存–>多个工作内存–>对应自己的线程
      • 多线程代表多条路
      • 每一条路有自己的工作空间
  • 底层运行机制:
    • 当多个线程同时进行时,CPU会每个线程只做一部分,然后依次同时做,看起来像同时进行一样
  • 生命周期
    在这里插入图片描述
  • 代码部分
    • 1.继承Thread类
package Xiancheng;

public class Demo1 {
    public static void main(String[] args) {
        //两个线程同时进行,执行顺序与CPU有关
        Thread a=new ThreadA();
        a.start();//使用start运行
        Thread b=new ThreadB();
        b.start();

    }
}

class ThreadA extends Thread{
    @Override
    public void run() {//重写run方法
        for(int i=0;i<=100;i++){
            System.out.println(i);
            try {
                Thread.sleep(1000);//停顿1s 1000ms
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class ThreadB extends Thread{
    @Override
    public void run() {
        for(char i='a';i<='z';i++){
            System.out.println(i);
            try {
                Thread.sleep(1000);//停顿1s 1000ms
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果就不演示了

  • 2.Runnable接口
package Xiancheng;

import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.sql.Connection;

public class Demo2 extends JFrame implements Runnable{
    private  JLabel j1=new JLabel();
    private  int count=0;
    private Container container=getContentPane();//声明容器
    public Demo2(){
        setBounds(400,200,1000,800);
        container.setLayout(null);
        try{
            URL url=Demo2.class.getResource("Spyder.png");
            Icon icon=new ImageIcon(url);//实例化一个Icon
            j1.setIcon(icon);//将图标放置在标签中
        }catch (NullPointerException ex){
            return;
        }
        j1.setHorizontalAlignment(SwingConstants.LEFT);
        j1.setBounds(100,100,300,300);
        j1.setOpaque(true);
        container.add(j1);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    }

    public static void main(String[] args) {
        Demo2 frame=new Demo2();
        Thread t=new Thread(frame);
        t.start();
    }
    @Override
    public void run() {
        int count=10;
        while (true){
            j1.setBounds(count,100,500,400);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            count+=5;
            if(count>=200){
                count=10;
            }
        }
    }
}

运行结果如下:
在这里插入图片描述
第一次做GIF动画,还附带水印,大家就将就的看吧,不好意思。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值