Java初识线程基本知识

举报
小阿杰· 发表于 2022/01/21 21:27:28 2022/01/21
【摘要】 线程是操作系统能够进行运算的最小单位,被包含在进程中,是进程的实际运算单位。可以使用多线程提高运算速度。 2、进程  进程由操作系统分配的内存空间,包含一个或多个线程。 3、进程和线程的关系  一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。  线程是进程中的一部分,进...

1、线程

  线程是操作系统能够进行运算的最小单位,被包含在进程中,是进程的实际运算单位。可以使用多线程提高运算速度。

2、进程

  进程由操作系统分配的内存空间,包含一个或多个线程。

3、进程和线程的关系

  一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
  线程是进程中的一部分,进程包含多个线程在运行。
  一个程序至少有一个进程,一个进程至少有一个线程。
总结
1) 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
2)资源分配给进程,同一进程的所有线程共享该进程的所有资源(内存、变量、常量等)
3)真正在机器上运行的是线程。
4)不同进程的线程间要利用消息通信的办法实现同步

4、线程安全

  线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

  线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
  ArrayList、LinkedList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。
示例

public static void main(String[] args){
        // 进行10次测试
        for(int i = 0; i < 10; i++){
            test();
        }
    }
    public static void test(){
        // 用来测试的List
        List<Object> list = new ArrayList<Object>();
        // 线程数量
        int threadCount = 100;
        // 用来让主线程等待threadCount个子线程执行完毕
        CountDownLatch countDownLatch = new CountDownLatch(threadCount);
        // 启动threadCount个子线程
        for(int i = 0; i < threadCount; i++){
            Thread thread = new Thread(new MyThread(list, countDownLatch));
            thread.start();
        }
        try {
            // 主线程等待所有子线程执行完成,再向下执行
            countDownLatch.await();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        // List的size
        System.out.println(list.size());
    }
}

class MyThread implements Runnable{
    private List<Object> list;
    private CountDownLatch countDownLatch;//CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。
    public MyThread(List<Object> list, CountDownLatch countDownLatch){
        this.list = list;
        this.countDownLatch = countDownLatch;
    }
    public void run(){
        // 每个线程向List中添加100个元素
        for(int i = 0; i < 100; i++){
            list.add(new Object());
        }
        // 完成一个子线程
        countDownLatch.countDown();
    }

5、线程生命周期

  1. 新建状态 new()
  2. 就绪状态 star()
  3. 运行状态 run()
  4. 阻塞状态 sleep()睡眠 suspend()挂起
  5. 死亡状态

6、线程优先级 1-10

   初始默认都是5
  具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序

结语

  好了,以上就是Java初识线程基本知识介绍,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】,欢迎关注阅读交流。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。