【JAVASE基础】线程

1.线程的基本概念
1.1进程
任何的软件存储在磁盘中,运行软件的时候,OS使用I0技术,将磁盘中的软件的文件加
载到内存,程序在能运行。
进程的概念:应用程序(typerpa,word,IDEA)运行的时候进 入到内存,程序在内存
中占用的内存空间(进程).
1.2线程
线程(Thread) :在内存和CPU之间,建立一条连接通路,CPU可以到内存中取出数据
进行计算,这个连接的通路,就是线程.
-个内存资源:一个独立的进程进程中可以开启多个线程(多条通路)
并发同一一个时刻多个线程同时操作了同一一个数据
并行:同一个时刻多个线程同时执行不同的程序
2. Java实现线程程序;
今天之前的所有程序都有一个共性: main启动之后,一条线走到底(单线程)
●实现线程程序的步骤
。定义类继承Thread
。子类重写方法run
。创建子类对象
。调用子类对象的方法start()启动线程
2.3 Thread类方法
●Thread类的方法getName()返回线程的名字,返回值是String类型
●Thread类静态方法: Thread currentThread)
。静态调用,作用是放回当前的线程对象
。“当前”,当今皇上I
●Thread类的方法join()
。解释,执行join()方法的线程他不结束,其它线程运行不了
●Thread类的方法static yield()
。线程让步,线程把执行权让出

package com.sdjzu.thread1;
/*
* 创建一个类继承Thread
* */
public class SubThread extends Thread{
    //重写run方法,不需要对象调用,jvm调用
    public void run(){
        Thread thread = Thread.currentThread();
        System.out.println("thread.getName() = " + thread.getName());
        for (int i = 0; i < 50; i++) {
            //获取当前线程的名字

            System.out.println("run"+i);
        }
    }
}

package com.sdjzu.thread1;

public class SubThreadTest {
    public static void main(String[] args) throws InterruptedException {
        //获取当前的线程的名字
        Thread thread = Thread.currentThread();
        System.out.println("thread.getName() = " + thread.getName());
        //创建一个类的对象
        SubThread subthread1=new SubThread();
        SubThread subthread2=new SubThread();
        //设置线程的优先级
        subthread1.setPriority(Thread.MAX_PRIORITY);
        subthread2.setPriority(Thread.MIN_PRIORITY);
        //调用start开启run方法
        //一次start一个方法栈
        subthread2.start();
        //subthread2运行完下一个才能运行
        subthread2.join();
        subthread1.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("main"+i);
        }
    }
}

D:\developertool\Java\jdk1.8.0\bin\java.exe "-javaagent:D:\developertool\Java\IntelliJ IDEA 2021.2.2\lib\idea_rt.jar=62955:D:\developertool\Java\IntelliJ IDEA 2021.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\developertool\Java\jdk1.8.0\jre\lib\charsets.jar;D:\developertool\Java\jdk1.8.0\jre\lib\deploy.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\access-bridge-64.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\cldrdata.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\dnsns.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\jaccess.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\jfxrt.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\localedata.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\nashorn.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunec.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunjce_provider.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunmscapi.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunpkcs11.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\zipfs.jar;D:\developertool\Java\jdk1.8.0\jre\lib\javaws.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jce.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jfr.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jfxswt.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jsse.jar;D:\developertool\Java\jdk1.8.0\jre\lib\management-agent.jar;D:\developertool\Java\jdk1.8.0\jre\lib\plugin.jar;D:\developertool\Java\jdk1.8.0\jre\lib\resources.jar;D:\developertool\Java\jdk1.8.0\jre\lib\rt.jar;D:\developertool\Java\idea202122space\JAVAStage\out\production\module11-thread com.sdjzu.thread1.SubThreadTest
thread.getName() = main
thread.getName() = Thread-1
run0
run1
run2
run3
run4
run5
run6
run7
run8
run9
run10
run11
run12
run13
run14
run15
run16
run17
run18
run19
run20
run21
run22
run23
run24
run25
run26
run27
run28
run29
run30
run31
run32
run33
run34
run35
run36
run37
run38
run39
run40
run41
run42
run43
run44
run45
run46
run47
run48
run49
main0
main1
main2
main3
main4
main5
main6
thread.getName() = Thread-0
main7
run0
main8
main9
main10
main11
main12
main13
main14
main15
main16
main17
main18
main19
main20
main21
main22
main23
main24
main25
main26
main27
main28
main29
main30
main31
main32
main33
main34
main35
main36
main37
main38
main39
main40
main41
run1
main42
run2
main43
main44
main45
run3
main46
main47
main48
run4
run5
run6
run7
run8
run9
run10
run11
run12
run13
run14
run15
run16
run17
run18
main49
main50
main51
main52
main53
main54
main55
main56
main57
main58
main59
main60
main61
main62
main63
main64
main65
main66
main67
main68
main69
main70
main71
main72
main73
main74
main75
main76
run19
main77
main78
main79
main80
main81
run20
main82
run21
main83
run22
main84
run23
main85
run24
main86
run25
main87
main88
main89
main90
main91
main92
main93
main94
main95
main96
main97
main98
main99
run26
run27
run28
run29
run30
run31
run32
run33
run34
run35
run36
run37
run38
run39
run40
run41
run42
run43
run44
run45
run46
run47
run48
run49

Process finished with exit code 0

3. Java实现线程程序
3.1 java.lang.Runnable接口
●实现线程程序的步骤:

定义类实现接口
。重写接口的抽象方法run()
。创建Thread类对象
■Thread类构造方法中,传递Runnable接口的实现类对象
。调用Thread对象方法start()启动线程
3.2实现接口的好处
接口实现好处是设计.上的分离效果:线程要执行的任务和线程对象本身是分离的.
继承Thread重写方法run0: Thread是线程对象run()是线程要执行的任务
实现Runnable接口:方法run在实现类和线程无关创建Thread类传递接口的实现
类对象,线程的任务和Thread没有联系,解开耦合性

package com.sdjzu.thread2;

public class Runnable implements java.lang.Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

package com.sdjzu.thread2;

public class RunnableTest {
    public static void main(String[] args) throws InterruptedException {
        //创建接口的实现类对象
       Runnable r=new Runnable();
        //创建线程对象,并传入接口的实现类对象
        Thread t1=new Thread(r);
        Thread t2=new Thread(r);
        //启动线程
        t1.start();
        t1.join();
        t2.start();
    }
}

D:\developertool\Java\jdk1.8.0\bin\java.exe "-javaagent:D:\developertool\Java\IntelliJ IDEA 2021.2.2\lib\idea_rt.jar=63357:D:\developertool\Java\IntelliJ IDEA 2021.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\developertool\Java\jdk1.8.0\jre\lib\charsets.jar;D:\developertool\Java\jdk1.8.0\jre\lib\deploy.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\access-bridge-64.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\cldrdata.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\dnsns.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\jaccess.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\jfxrt.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\localedata.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\nashorn.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunec.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunjce_provider.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunmscapi.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\sunpkcs11.jar;D:\developertool\Java\jdk1.8.0\jre\lib\ext\zipfs.jar;D:\developertool\Java\jdk1.8.0\jre\lib\javaws.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jce.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jfr.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jfxswt.jar;D:\developertool\Java\jdk1.8.0\jre\lib\jsse.jar;D:\developertool\Java\jdk1.8.0\jre\lib\management-agent.jar;D:\developertool\Java\jdk1.8.0\jre\lib\plugin.jar;D:\developertool\Java\jdk1.8.0\jre\lib\resources.jar;D:\developertool\Java\jdk1.8.0\jre\lib\rt.jar;D:\developertool\Java\idea202122space\JAVAStage\out\production\module11-thread com.sdjzu.thread2.RunnableTest
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
Thread-0:10
Thread-0:11
Thread-0:12
Thread-0:13
Thread-0:14
Thread-0:15
Thread-0:16
Thread-0:17
Thread-0:18
Thread-0:19
Thread-0:20
Thread-0:21
Thread-0:22
Thread-0:23
Thread-0:24
Thread-0:25
Thread-0:26
Thread-0:27
Thread-0:28
Thread-0:29
Thread-0:30
Thread-0:31
Thread-0:32
Thread-0:33
Thread-0:34
Thread-0:35
Thread-0:36
Thread-0:37
Thread-0:38
Thread-0:39
Thread-0:40
Thread-0:41
Thread-0:42
Thread-0:43
Thread-0:44
Thread-0:45
Thread-0:46
Thread-0:47
Thread-0:48
Thread-0:49
Thread-1:0
Thread-1:1
Thread-1:2
Thread-1:3
Thread-1:4
Thread-1:5
Thread-1:6
Thread-1:7
Thread-1:8
Thread-1:9
Thread-1:10
Thread-1:11
Thread-1:12
Thread-1:13
Thread-1:14
Thread-1:15
Thread-1:16
Thread-1:17
Thread-1:18
Thread-1:19
Thread-1:20
Thread-1:21
Thread-1:22
Thread-1:23
Thread-1:24
Thread-1:25
Thread-1:26
Thread-1:27
Thread-1:28
Thread-1:29
Thread-1:30
Thread-1:31
Thread-1:32
Thread-1:33
Thread-1:34
Thread-1:35
Thread-1:36
Thread-1:37
Thread-1:38
Thread-1:39
Thread-1:40
Thread-1:41
Thread-1:42
Thread-1:43
Thread-1:44
Thread-1:45
Thread-1:46
Thread-1:47
Thread-1:48
Thread-1:49

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值