JAVA中的线程是什么?

程序

程序:是静态的,JAVA代码编译后的有序代码的集合,是保存在硬盘上的。

进程

1.为什么有进程

因为最开始计算机只支持运行一个程序,但是随着计算机硬件的升级,比如说有了更多的资源,所以希望计算机同时完成多件事情,而且彼此之间互不影响。

2.什么是进程

通过CPU在一个资源集合上的一次动态处理过程

3.进程的组成

内核态(资源):寄存器中指令(代码)的地址空间,文件和网络资源,这些是操作系统进行处理的,JAVA程序是无法直接操作硬件的,所以这部分的资源调度,JAVA程序是通过切换到内核态来完成的。

用户态(数据的处理):当程序获取到数据后,比如说TXT文件中的字符等,进行逻辑上的转换,这是用户代码完成的,这部分的操作成为用户态。

线程

1.为什么有线程

因为上面提到过进程的资源是互不影响的,所以在完成一些复杂程序的时候,资源的处理变得非常麻烦,比如说我们的游戏需要声音和画面,可以通过多个进程并发(单核)或者并行(多核)完成,但是进程间的资源是相互隔离的(独立的页表),需要通过资源的传递才可以完成,开销过大。

2.什么是线程

线程是可以共享进程资源执行流程,也就是说进程中的用户态是运行在线程上的,线程=进程-共享资源

3.线程的实现

–用户线程:用户空间实现,操作系统不知道的,调度,创建,销毁都是由用户态来完成的。
–内核线程:内核中实现,调度,创建,销毁都是由内核态完成的。
–轻量级进程:内核中实现,支持用户线程,每一个用户线程对应一个内核线程。

线程和进程的区别:

–进程之间的资源是独立的,线程是共享的。
–进程资源分配单位,线程是CPU调度单位。
–创建和释放线程时间比进程时间短。

总结:

JAVA中使用的轻量级进程,线程的创建和销毁是JAVA层面实现的用户线程,在windows和linux版本的JVM中,用户线程和内核线程一比一对应的,所以线程调度是由内核线程来实现的,也就是由操作系统来调度的。这样的调度方式需要切换到内核态,开销也很大,所以现在很多使用CAS等操作来代替sychornized保证数据的一致性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程是Java的一种机制,用于实现并发编程。线程可以看作是程序执行流的最小单元,能够独立运行并执行任务。Java线程是通过java.lang.Thread类来实现的,可以继承Thread类或实现Runnable接口来创建线程Java线程的运用可以通过以下几个步骤来实现: 1. 创建线程对象 在Java创建线程对象有两种方式,一种是继承Thread类,另一种是实现Runnable接口。继承Thread类需要重写run()方法,实现Runnable接口需要实现run()方法。 2. 启动线程 创建线程对象后,需要调用线程对象的start()方法来启动线程。调用start()方法后,线程进入就绪状态,等待系统调度执行。 3. 线程执行任务 线程启动后,会自动执行run()方法的任务。在任务执行过程,可以通过sleep()方法、yield()方法等来控制线程的执行。 4. 线程结束 线程执行完任务后,会自动退出。在多线程编程,需要注意线程的结束状态,避免出现线程泄漏或死锁等问题。 以下是一个简单的Java线程示例代码,通过继承Thread类来创建线程: ```java public class SimpleThread extends Thread { public void run() { System.out.println("线程开始执行!"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程执行完毕!"); } public static void main(String[] args) { SimpleThread thread = new SimpleThread(); thread.start(); System.out.println("主线程执行完毕!"); } } ``` 在上述代码,我们创建了一个继承自Thread类的SimpleThread类,并在run()方法定义了线程要执行的任务。在main()方法,我们创建了一个SimpleThread对象,并调用它的start()方法来启动线程。在start()方法被调用后,线程会自动调用run()方法来执行任务。 除了继承Thread类外,我们还可以通过实现Runnable接口来创建线程。以下是一个实现Runnable接口的示例代码: ```java public class SimpleRunnable implements Runnable { public void run() { System.out.println("线程开始执行!"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程执行完毕!"); } public static void main(String[] args) { SimpleRunnable runnable = new SimpleRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("主线程执行完毕!"); } } ``` 在上述代码,我们创建了一个实现了Runnable接口的SimpleRunnable类,并在run()方法定义了线程要执行的任务。在main()方法,我们创建了一个SimpleRunnable对象,并将它作为参数传递给Thread类的构造方法来创建一个新的线程。最后,我们调用线程的start()方法来启动线程。 以上就是Java线程的简单运用,当然Java线程的使用还涉及到线程同步、线程池等高级特性,需要进一步学习和实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值