JAVA 多线程

JAVA 多线程,第1张

JAVA 多线程 1、多线程概念

与 *** 作系统中多线程差不多,但是JAVA中的多线程是对虚拟机,
而 *** 作系统是面向实实在在的硬件(更复杂)。利用资源处理任务的思路相同。

2、此处线程

每个线程拥有独立的运行栈和程序计数器(PC),线程切换的开销小一个进程中的多个线程共享相同的内存单元/内存地址空间。它们从同一堆中分配对象,可以访问相同的变量和对象。使得线程的通信简便、高效。但多个线程 *** 作系统共享的资源有安全隐患。(深入理解需要长期不断学习,迭代更新) 3、线程的简单创建

1、方式一

1.创建一个继承于Thread的子类
2.重写Thread的run()>>>此线程需要做的事写在此处
3.创建Thread的对象
4.通过此对象调用start()( 作用:启动线程,去调用run())
注意:

不能用 对象.run() 启动线程一个对象只能用一次start()

创建一个线程:

线程一

package com.learn.thread;

//1.创建一个继承于Thread的子类
public class LearnThread_01 extends Thread {

    //2.重写Thread的run()
    @Override
    public void run() {
        //找出1-100的偶数
        for (int i = 1; i <= 100; i++) {
            if (i%2 == 0) {
                System.out.println("线程一:"+i);
            }
        }
    }
}

线程二

package com.learn.thread;

public class LearnThread_02 extends Thread{
    @Override
    //找出1-100 奇数
    public void run() {
        for (int i = 1; i <= 100; i++) {
            if (i%2 != 0) {
                System.out.println("线程二:"+i);
            }
        }
    }
}

测试

package com.learn.thread;

public class AllThread {
    public static void main(String[] args) {
        LearnThread_01 learnThread1 = new LearnThread_01();
        learnThread1.start();
        //主线程
        for (int i = 1; i <= 100; i++) {
            if (i%2 != 0) {
                System.out.println("线程二:"+i);
            }
        }
    }
}

结果:这里已经乱了哦(体现了线程的思想,此处线程不安全)
补充1:Thread中常用方法

satar()========================启动线程、调用run()run()=========================子类重写建立需要的 *** 作currentThread()=================静态方法,返回执行当前代码的线程getName()=====================获取当前线程的名字setName()=====================设置当前线程的名字yield()========================释放当前Cpu的使用sleep()=======================停等(1000)单位为毫秒join()========================在线程A调用线程B时,A阻塞直到B完成结束阻塞


补充2:线程的优先级

0000&*&

NAX_PRIORITY :10NAX_PRIORITY :5 (默认优先级)NAX_PRIORITY :1
&*&
setPriority();
getPriority()

2、方式二

    创建一个实现Runnable 接口的类实现抽象方法run()创建实现类的对象将此对象作为参数传递Thread类的构造器中,创建Thread的对象通过Thread的对象调用start()
package com.learn.thread;

public class RunLearThread implements Runnable{
    @Override
    public void run() {
        //找出1-100的偶数
        for (int i = 1; i <= 100; i++) {
            if (i%2 == 0) {
                System.out.println("Runnable 实现");
            }
        }
    }
}

测试

@Test
    public void test_02(){
        RunLearThread run = new RunLearThread();
        Thread thread = new Thread(run);
        thread.start();
    }

结果:

4、线程安全

1、线程的生命周期(java)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存