网站首页 > java教程 正文
线程和进程的区别是什么?
- 什么是进程?
进程是并发执行的程序在执行过程中分配和管理资源的基本单位。
- 什么是线程?
线程是进程的一个执行单元,是比进程还要小的独立运行的基本单位。
- 进程和线程的关系
一个运行的程序中至少有一个进程,一个进程中至少会有一个线程。
在java中如何实现多线程?
- 继承Thread类,重写run方法
package com.thread; /** * @descrption 使用集成Thread类来实现多线程 * @author lizhilun * */ public class ThreadDemo extends Thread{ //重写run方法 @Override public void run() { System.out.println("Thread子类实现的多线程。。。。"); } //测试线程启动 public static void main(String[] args) { ThreadDemo thread = new ThreadDemo(); thread.start();//启动线程 } } |
- 实现Runnable接口,重写run方法(无返回值)
package com.thread; /** * @descrption 实现Runnable接口创建多线程 * @author lizhilun * */ public class RunnableDemo implements Runnable{ //重写run方法 @Override public void run() { System.out.println("实现Runnable接口来创建的多线程。。。。"); } // 测试线程启动 public static void main(String[] args) { RunnableDemo runnable = new RunnableDemo(); Thread thread = new Thread(runnable); thread.start();// 启动线程 } } |
- 实现Callable接口,重写call方法(有返回值)
package com.thread; /** * @descrption 实现Callable接口创建多线程 * @author lizhilun * */ import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; @SuppressWarnings("all") public class CallableDemo implements Callable{ //重写call方法 @Override public Object call() throws Exception { String result="实现Callable接口来创建的多线程。。。。"; return result; } // 测试线程启动 public static void main(String[] args) throws InterruptedException, ExecutionException { CallableDemo runnable = new CallableDemo(); FutureTask futureTask = new FutureTask<>(new CallableDemo()) ; Thread thread = new Thread(futureTask); thread.start();// 启动线程 Object result = futureTask.get();//获取call方法的返回值 System.out.println(result); } } |
启动一个线程是run()还是start()?它们的区别是什么?
start()启动线程;
run():是在start()方法会自动调用run()方法,线程中要做的事情要写到run中
为什么wait(),notify(),notifyAll()等方法都定义在Object类中?
任何的类都可能被多个线程并发访问,所以,任何类都有权利要求所访问的线程"等待",也有唤醒等待线程的能力,所以这些方法定义在Object类中
sleep()和wait()方法的区别?
sleep()方法用被用于让程序暂停指定的时间,而wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者nofifyAl()方法
如何保证线程的安全?
需要使用同步来实现线程的安全,同步的实现的三种方式:
- 同步方法
在方法上加synchronized关键字来修饰
- 同步代码块
使用synchronized来修饰需要同步的代码块
- 使用Lock锁
在需要同步的代码之前Lock的lock()方法获取锁并在finally中调用Lock的unlock()方法来释放锁
线程的运行状态和常见执行情况图解
猜你喜欢
- 2024-09-30 最全多线程经典面试题和答案(多线程线程池面试题)
- 2024-09-30 2 万字长文详解 10 大多线程面试题|原力计划
- 2024-09-30 美团点评:现场面试41题实拍含答案!JVM+HashMap+多线程+Mysql!
- 2024-09-30 Java多线程面试题,面试官最喜欢听到的答案
- 2024-09-30 Java 第三模块 多线程面试题(未完待续)
- 2024-09-30 Java学习之多线程经典面试题(java多线程编程题)
- 2024-09-30 听说,有位Java程序员学完这59道多线程面试题之后,直接面上阿里
- 2024-09-30 技术问答:请收下这最全多线程经典面试题和答案
- 2024-09-30 最新java多线程面试题目(java多线程面试题线程池)
- 2024-09-30 JAVA多线程面试题(java中的多线程面试问题)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)