线程 进程 多线程:
0 线程创建方法代码:
package thread; /** * 线程须知: 线程的创建方式 thread.start(); 表示启动线程,并将这个线程添加到线程池中, 启动后分配到CPU时间片后,代码自动调用这个线程的run()方法 * run()方法内执行的是线程体 * * Thread 主要看的源码: * public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); } public void run() { if (target != null) { target.run(); } } * @author zm * */ public class CreateThread { public static void main(String[] args) { // 创建方式1 继承父类 重写父类方法run(), 让线程执行子类重写后的线程体 // 分支线程执行 ChildThread childThread = new ChildThread(); childThread.start(); // 创建方式2, 面相对象思想,将线程体交给Thread,让Thread调用runnable的run() 干活的人我给你了,具体什么时候干让Thread来决定 MyRunnable myRunnable = new MyRunnable(); Thread child2Thread = new Thread(myRunnable); child2Thread.start(); // 看如下案例, 分析结果: 结果是 thread : 线程名 案例重写了 run()方法因此不会再调用Thread.run() ,自然不会执行 runnable对象的run() new Thread( new Runnable(){ public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("runnable :" + Thread.currentThread().getName()); } } }){ public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread :" + Thread.currentThread().getName()); } } }.start(); // 主线程执行 while(true) { try { Thread.sleep(700); System.out.println("main name is: " + Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } } class ChildThread extends Thread{ @Override public void run() { while(true) { try { Thread.sleep(700); System.out.println("ChildThread name is: " + Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } } class MyRunnable implements Runnable{ @Override public void run() { while(true) { try { Thread.sleep(700); System.out.println("ChildThread1 name is: " + Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
1 线程创建方法总结:
1 线程两种创建方法下 执行线程都是用 thread.start(), 将thread交给cpu等待时间段 2 线程启动,真正执行功能代码放在 run(){}中, 看Thread的run()源代码写法: /** 明确说明了线程真正执行体执行内容 * If this thread was constructed using a separate * <code>Runnable</code> run object, then that * <code>Runnable</code> object's <code>run</code> method is called; 如果传递runnable对象那么将执行runnable的run()方法 * otherwise, this method does nothing and returns. * <p> * Subclasses of <code>Thread</code> should override this method. 如果是Thread的话 那么需要重写此方法 * * @see #start() * @see #stop() * @see #Thread(ThreadGroup, Runnable, String) */ public void run() { if (target != null) { target.run(); } } 3 如果一个类,既集成了Thread并重写了run() 同时又给这个类传递了runnable对象,那么执行的是重写Thread的run()方法,因此run方法重写没有机会在执行到 target != null target.run()
相关推荐
首先,让我们关注JDK 1.5中的一个重要特性——自动装箱与拆箱。在之前的版本中,基本类型与包装类之间的转换需要手动进行,而JDK 1.5引入了自动装箱和拆箱机制,使得操作更加简便。例如,现在可以方便地将一个...
10. **泛型**:Java 1.5引入的泛型,允许在编译时检查类型安全,同时提供了一种方式来消除装箱和拆箱操作。 11. **枚举类型**:Java 1.5引入的枚举,是一种特殊的类,用于定义有限数量的常量。 12. **注解**:`@...
《初识Java:JDK1.5入门精典》是一本专为新手设计的Java编程教程,基于Java Development Kit(JDK)1.5版本。这本书深入浅出地介绍了Java编程语言的基础概念和核心特性,旨在帮助读者快速掌握Java编程技能。 首先,...
在这个特定的版本——JDK 1.6.0_45,我们关注的是Java平台的标准版(Java SE)的一个早期版本。这个版本在2014年发布,包含了Java编译器、虚拟机(JVM)、类库以及开发者需要的各种工具,使得开发者能够在Windows...
此资源——"JDK-1-6中文API",是Java程序员的重要参考资料,特别是对于初学者,它提供了一份详尽的中文文档,便于理解和应用Java的各种类库。 API(Application Programming Interface)是一系列预先定义的函数,...
8. **枚举类型**:JDK 1.5引入的枚举类型,提供了一种更安全的替代常量的方式,可以避免误修改和类型安全问题。 9. **泛型**:泛型增强了代码的类型安全性,允许在类、接口和方法中指定类型参数,减少类型转换的...
项目执行有两种方式:作为应用程序和Applet。在MyEclipse中,可以直接运行项目,观察程序的运行效果。如果打算长期在MyEclipse中工作,可以考虑为Application和Applet声明包,如com.px1987.animation。这样做的好处...
1. **StringBuffer 实现方式与容量扩充**:StringBuffer 是线程安全的字符串操作类,它维护了一个字符数组来存储字符串。当内部数组容量不足时,会自动扩容。扩容策略通常是将容量翻倍。 2. **JVM 启动参数**:-...
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
- **JDK版本更新**:对比JDK1.5至JDK1.8的新特性,如自动装箱拆箱、枚举、泛型、并发工具类等改进。 通过系统学习以上知识点,并结合实际项目经验,你将逐渐积累深厚的技术底蕴,成为一名Java开发领域的专家。记住...
- 为了提高多线程程序的可靠性和性能,JDK 1.5引入了一套新的内存模型。 - 新模型加强了对内存可见性的保证,增加了对volatile关键字的支持,并定义了更严格的同步操作规则。 #### 五、总结 双重检查锁机制在设计...
7. **多线程性**:Java内置了对多线程的支持,使得开发者可以轻松创建并发执行的程序,有效利用多核处理器的性能,同时避免了底层线程管理的复杂性。 8. **动态性**:Java具有动态绑定和动态加载类的能力,这意味着...
解决了懒汉式线程安全与效率问题,但在JDK1.5之前可能存在隐患,1.5之后已修复。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public static ...
- **发展期**:从JDK1.5至JDK1.7版本。这一阶段引入了许多新特性,如泛型、注解等,大大增强了Java的功能性和灵活性。 - **更名与升级**:1998年,Java2发布,标志着Java进入了一个新的发展阶段。随后,2005年Sun ...
在接下来的几年里,Java不断进化,JDK1.3在2000年发布,随后是具有重大更新的Java SE 5.0(JDK1.5)在2004年推出,同时定义了Java EE(企业版)和Java ME(微型版)。 2009年,Sun Microsystems被Oracle公司收购,...
- 早期的一种数据库连接方式,通过ODBC驱动连接数据库。 - **5.3 查询记录** - **5.3.1 顺序查询**:按照特定顺序检索数据。 - **5.3.2 游动查询**:使用ResultSet对象逐行检索数据。 - **5.3.3 随机查询**:...
最初计划使用C++进行开发,但由于C++过于复杂,Sun Microsystems的工程师决定基于C++创建一种新的编程语言平台——Oak(橡树)。然而,Oak在与NetScape的竞争中失利,但Sun并未放弃,反而转向浏览器技术的研究,并在...
7.1.1 创建线程 7.1.2 操作线程 7.2 UI线程与非UI线程 7.3 多线程中的常用类 7.3.1 Handler类 7.3.2 AsyncTask类 7.3.3 Timer定时器 7.4 Android多线程通信机制 7.5 小结 练习 第8章 网络通信 ...
- **线程基础**:介绍了Java中的线程创建、控制和销毁,包括Thread类和Runnable接口。 - **同步机制**:详细讲解了synchronized关键字,wait/notify机制,以及如何使用这些机制实现线程间的通信和协作。 - **并发...