多线程 (Thread)

多线程 (Thread)

什么是线程?

要讲线程,首先我门要知道进程的概念。那么什么是进程呢?进程实际上就是一个个正在运行的程序,一般来说,一个程序只有一个进程。而线程是进程中的一个个独立的小单元,一个进程可以拥有多个线程。比如我们以前写的程序,只有一个 main 方法,当程序运行时 main 方法就是这个程序的一个线程。但是里面其实还有一个隐藏的线程——GC线程。我们知道,方法需要压栈后才能被执行,在上一个方法被执行的时候是不能执行下一个方法的。如果我们想要让两个 方法同时执行,我们就要用到多线程了。

多线程

多线程是指一个程序中包含多个执行流。说到多线程,就不得不说一下并行和并发了。

那么什么时并行,什么是并发呢?

并行就是指多个进程在同时执行。

并发就是某一段时间中,一次只执行一个进程,但是有多个进程交替执行。就是一个进程执行一定时间后就执行另一个进程。并发时,在没有程序员干涉的情况下,进程的执行顺序由CPU来决定,CPU说谁先执行,谁就先执行,我们是无法更改的。

那么到底是怎么实现并发的呢?

我们都知道,方法的执行需要开辟栈帧,因此,想要实现多个方法的并发,就需要开辟新的栈帧。Java中,有两种方式可以实现多线程,一种是继承 Thread 类,另一种是实现 Runnable接口。这两种方式都需要对其中的run() 方法重写,再通过start()方法来启动线程。但是 Runnable 接口中并没有satat()方法,因此我们就需要借助 Thread 来实现。

示例

ThreadTest.java

package com.why.thread;

public class ThreadTest extends Thread {
    String threadId;

    public ThreadTest() {

    }

    public ThreadTest(String threadId) {
        this.threadId = threadId;
    }

    public void run() {
        System.out.println("Thread started: " + this.threadId);
        for(int i = 0; i < 6; i++) {
            System.out.print("i = " +(i + 1)+ "\t");
        }
        System.out.println("Thread stopped: " + this.threadId);
    }
}

Test.java

package com.why.thread;

public class Test {
    public static void main(String[] args) {
        Thread thread1 = new ThreadTest("thread 1");
        Thread thread2 = new ThreadTest("thread 2");
        Thread thread3 = new ThreadTest("thread 3");
        thread1.start();
        thread2.start();
        thread3.start();
    }
}
运行结果

RunnableTest.java

package com.why.thread;

public class RunnableTest implements Runnable{
    String threadId;

    public RunnableTest() {

    }

    public RunnableTest(String threadId) {
        this.threadId = threadId;
    }

    @Override
    public void run() {
        System.out.println("Thread started: " + this.threadId);
        for(int i = 0; i < 6; i++) {
            System.out.print("i = " +(i + 1)+ "\t");
        }
        System.out.println("Thread stopped: " + this.threadId);
    }
}

Test.java

package com.why.thread;

public class Test {
    public static void main(String[] args) {
        RunnableTest runnableTest1 = new RunnableTest("thread1");
        RunnableTest runnableTest2 = new RunnableTest("thread2");
        Thread thread1 = new Thread(runnableTest1);
        Thread thread2 = new Thread(runnableTest2);
        thread1.start();
        thread2.start();
    }
}
运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值