进程与线程基础
2022/9/1 5:23:00
本文主要是介绍进程与线程基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.一个进程可以理解为一个应用程序,一个进程通常包括多个线程。进程可以理解为一个公司,线程理解为公司的员工。
2.进程A与进程B之间内存独立不共享线程A与线程B之间堆与方法区内存共享,但是栈是独立的,一个线程拥有一个栈!!!
3.单核cpu不能实现真正的多线程并发,但是可以“模拟多线程并发”,例如它可以使多个线程来回切换,这样一来给人的感觉像是并发的。
4.start方法会启动另一个分支线程,而run方法不会。
两种方式:
package com.javastudy.example11; /* 1.一个进程可以理解为一个应用程序,一个进程通常包括多个线程。 进程可以理解为一个公司,线程理解为公司的员工: 2.进程A与进程B之间内存独立不共享 线程A与线程B之间堆与方法区内存共享,但是栈是独立的,一个线程拥有一个栈!!! 3.单核cpu不能实现真正的多线程并发,但是可以“模拟多线程并发”,例如它可以使多个线程来回切换, 这样一来给人的感觉像是并发的。 4.start方法会启动另一个分支线程,而run方法不会。 */ public class Thread01 extends Thread{ public static void main(String[] args) { //主线程 //方法一(继承Thread) MyThread thread = new MyThread(); //启动另一个线程 thread.start(); for(int i=0;i<100;i++){ System.out.println("线程一执行"+i); } //方法二(实现Runable接口) System.out.println("======方法二============="); MyRun myrun=new MyRun(); Thread t=new Thread(myrun); t.start(); for(int i=0;i<100;i++){ System.out.println("线程一执行"+i); } } } class MyThread extends Thread{ //分支线程 public void run(){ for(int i=0;i<100;i++){ System.out.println("线程二执行"+i); } } } //方法二 面向接口编程,常用 class MyRun implements Runnable{ @Override public void run() { for(int i=0;i<100;i++){ System.out.println("线程二执行"+i); } } }
获取线程名字,修改名字,获取对象:
package com.javastudy.example11; public class Thread02 { public static void main(String[] args) { Thread t=new Thread(new MyRun02()); t.start(); //获取名字 System.out.println("t1线程初始名字为-------"+t.getName()); for(int i=0;i<10;i++){ if(i==1){ //设置名字 t.setName("t1线程名字已被修改"); } System.out.println(t.getName()+"-----"+i); } Thread t2=new Thread(new MyRun02()); //获取名字 System.out.println("t2线程初始名字为-------"+t2.getName()); //获取当前对象 System.out.println("将t2赋值为当前对象,即main"); t2=Thread.currentThread(); System.out.println("此时,t2线程名字为-------"+t2.getName()); MyThread02 myt=new MyThread02(); myt.start(); MyThread02 myt2=new MyThread02(); myt2.start(); } } class MyRun02 implements Runnable{ @Override public void run() { System.out.println("=================线程2启动====================="); System.out.println("当前线程为"); } } class MyThread02 extends Thread{ public void run(){ Thread x1=Thread.currentThread(); System.out.println("当前线程为"+x1.getName()); x1.setName("change"); System.out.println("修改后为"+x1.getName()); /* for(int i=0;i<100;i++){ System.out.println("当前线程对象名字为"+i); }*/ } }
线程的休眠与唤醒
package com.javastudy.example11; public class Thread03 { public static void main(String[] args) { MyRun03 myRun03 = new MyRun03(); Thread t=new Thread(myRun03); t.start(); System.out.println("------主线程休眠3s-------"); try { t.sleep(1000*3); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("------主线程休眠自动结束-------"); // System.out.println("强制分支休眠结束,通过异常机制interrupt"); // 方式一 t.interrupt(); // 方式二 t.stop(); //合理方式 myRun03.flag=false; } } class MyRun03 implements Runnable{ boolean flag=true; @Override public void run() { //只能使用try catch,子类只能抛出更少的异常 System.out.println("------分支线程休眠5s-------"); if(flag){ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("------分支线程休眠结束-------"); }} }
休眠-唤醒 运行截图
这篇关于进程与线程基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署