- 浏览: 277956 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
typ0520:
推荐一个socket编程的异步socket类库,https:/ ...
java之Scoket 客户端和服务器的发送与接收 -
GGGGeek:
处理excel的时候,列太多,已经把pdf设置横向,依然不行, ...
jacob操作office分享 -
men4661273:
小白马 写道能不能发一下源代码啊https://git.osc ...
android自定义popupwindow仿微信 -
贝塔ZQ:
不错不错,总结的挺好的。插件实现也是不错的,PageOffi ...
jacob操作office分享 -
小白马:
能不能发一下源代码啊
android自定义popupwindow仿微信
参考:http://hi.baidu.com/xiaolincc26/home ——疯狂大白菜
在 Java 中,“线程”指两件不同的事情:
1、java.lang.Thread 类的一个实例;
2、线程的执行。
使用 java.lang.Thread 类或者 java.lang.Runnable 接口编写代码来定义、实例化
和启动新线程。
一个 Thread 类实例只是一个对象,像 Java 中的任何其他对象一样,具有变量和方
法,生死于堆上。
Java 中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在
后台运行着。
一个 Java 应用总是从 main()方法开始运行,mian()方法运行在一个线程内,它被
称为主线程。
一旦创建一个新的线程,就产生一个新的调用栈。
线程总体分两类:用户线程和守候线程。
当所有用户线程执行完毕的时候,JVM 自动关闭。但是守候线程却不独立于 JVM,守
候线程一般是由操作系统或者用户自己创建的。
线程的定义: :
1.实现Runnable接口
void run()
使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独
立执行的线程中调用对象的 run 方法。
方法 run 的常规协定是,它可能执行任何所需的操作
2、扩展 java.lang.Thread 类。
此类中有个 run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该
Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
Thread 的子类应该重写该方法。
实例化线程
1、如果是扩展 java.lang.Thread 类的线程,则直接 new 即可。
2、如果是实现了 java.lang.Runnable 接口的类,则用 Thread 的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
启动线程
在线程的 Thread 对象上调用 start()方法,而不是 run()或者别的方法。
Crazy Cabbage
http://hi.baidu.com/xiaolincc26/home ——疯狂大白菜
5
在调用 start()方法之前:线程处于新状态中,新状态指有一个 Thread 对象,但还
没有一个真正的线程。
在调用 start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标 run()方法将运行。
注意:对 Java 来说,run()方法没有任何特别之处。像 main()方法一样,它只是新
线程知道调用的方法名称(和签名)。因此,在 Runnable 上或者 Thread 上调用 run
方法是合法的。但并不启动新的线程。
例子:
1、实现 Runnable 接口的多线程例子
一个MyRunable的对象,就相当于一个任务,交给一个thread对象去完成,相当于一个工人
运行结果如下,
这是两次不用的运行结果,可以看出,新建的两个线程和主线程,运行结果不一致,每个线程的执行都是靠JVM的调度器来进行调度的,不分执行的前后
2.扩展Thread类的例子
结果是一样的
一些常见问题
1、线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机
自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机
总会为线程指定名字,并且主线程的名字总是 mian,非主线程的名字不确定。
2、线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
构造方法:Thread thread1 = new Thread(myRunable1, "thread1");
set方法:thread1.setName("thread1");
3、获取当前线程的对象的方法是:Thread.currentThread();
4、在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。
一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程
来说,调度程序不能保证其执行次序,持续时间也无法保证。
5、当线程目标 run()方法结束时该线程完成。
6、一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且
只能一次。一个可运行的线程或死线程可以被重新启动。
7、线程的调度是 JVM 的一部分,在一个 CPU 的机器上上,实际上一次只能运行一个
线程。一次只有一个线程栈执行。JVM 线程调度程序决定实际运行哪个处于可运行
状态的线程。
众多可运行线程中的某一个会被选中做为当前线程。可运行线程被选择运行的顺序
是没有保障的。
8、尽管通常采用队列形式,但这是没有保障的。队列形式是指当一个线程完成“一
轮”时,它移到可运行队列的尾部等待,直到它最终排队到该队列的前端为止,它
才能被再次选中。事实上,我们把它称为可运行池而不是一个可运行队列,目的是
帮助认识线程并不都是以某种有保障的顺序排列唱呢个一个队列的事实。
9、尽管我们没有无法控制线程调度程序,但可以通过别的方式来影响线程调度的方
式。
在 Java 中,“线程”指两件不同的事情:
1、java.lang.Thread 类的一个实例;
2、线程的执行。
使用 java.lang.Thread 类或者 java.lang.Runnable 接口编写代码来定义、实例化
和启动新线程。
一个 Thread 类实例只是一个对象,像 Java 中的任何其他对象一样,具有变量和方
法,生死于堆上。
Java 中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在
后台运行着。
一个 Java 应用总是从 main()方法开始运行,mian()方法运行在一个线程内,它被
称为主线程。
一旦创建一个新的线程,就产生一个新的调用栈。
线程总体分两类:用户线程和守候线程。
当所有用户线程执行完毕的时候,JVM 自动关闭。但是守候线程却不独立于 JVM,守
候线程一般是由操作系统或者用户自己创建的。
线程的定义: :
1.实现Runnable接口
void run()
使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独
立执行的线程中调用对象的 run 方法。
方法 run 的常规协定是,它可能执行任何所需的操作
2、扩展 java.lang.Thread 类。
此类中有个 run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该
Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
Thread 的子类应该重写该方法。
实例化线程
1、如果是扩展 java.lang.Thread 类的线程,则直接 new 即可。
2、如果是实现了 java.lang.Runnable 接口的类,则用 Thread 的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
启动线程
在线程的 Thread 对象上调用 start()方法,而不是 run()或者别的方法。
Crazy Cabbage
http://hi.baidu.com/xiaolincc26/home ——疯狂大白菜
5
在调用 start()方法之前:线程处于新状态中,新状态指有一个 Thread 对象,但还
没有一个真正的线程。
在调用 start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标 run()方法将运行。
注意:对 Java 来说,run()方法没有任何特别之处。像 main()方法一样,它只是新
线程知道调用的方法名称(和签名)。因此,在 Runnable 上或者 Thread 上调用 run
方法是合法的。但并不启动新的线程。
例子:
1、实现 Runnable 接口的多线程例子
package com.jysd.runable; public class MyRunable implements Runnable{ private String name; public MyRunable(String name){ this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name+":"+i); } } }
package com.jysd.runable; public class Test { public static void main(String[] args) { MyRunable myRunable1 = new MyRunable("张三"); MyRunable myRunable2 = new MyRunable("李四"); Thread thread1 = new Thread(myRunable1); Thread thread2 = new Thread(myRunable2); thread1.start(); thread2.start(); System.out.println("主线程"); } }
一个MyRunable的对象,就相当于一个任务,交给一个thread对象去完成,相当于一个工人
运行结果如下,
这是两次不用的运行结果,可以看出,新建的两个线程和主线程,运行结果不一致,每个线程的执行都是靠JVM的调度器来进行调度的,不分执行的前后
2.扩展Thread类的例子
package com.jysd.runable; public class MyThread extends Thread{ public MyThread(String name) { super(name); } public void run() { for(int i = 0;i<5;i++){ for(long k= 0; k <100000000;k++); System.out.println(this.getName()+" :"+i); } } public static void main(String[] args) { Thread t1 = new MyThread("张三"); Thread t2 = new MyThread("李四"); t1.start(); t2.start(); } }
结果是一样的
一些常见问题
1、线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机
自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机
总会为线程指定名字,并且主线程的名字总是 mian,非主线程的名字不确定。
2、线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
构造方法:Thread thread1 = new Thread(myRunable1, "thread1");
set方法:thread1.setName("thread1");
3、获取当前线程的对象的方法是:Thread.currentThread();
4、在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。
一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程
来说,调度程序不能保证其执行次序,持续时间也无法保证。
5、当线程目标 run()方法结束时该线程完成。
6、一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且
只能一次。一个可运行的线程或死线程可以被重新启动。
7、线程的调度是 JVM 的一部分,在一个 CPU 的机器上上,实际上一次只能运行一个
线程。一次只有一个线程栈执行。JVM 线程调度程序决定实际运行哪个处于可运行
状态的线程。
众多可运行线程中的某一个会被选中做为当前线程。可运行线程被选择运行的顺序
是没有保障的。
8、尽管通常采用队列形式,但这是没有保障的。队列形式是指当一个线程完成“一
轮”时,它移到可运行队列的尾部等待,直到它最终排队到该队列的前端为止,它
才能被再次选中。事实上,我们把它称为可运行池而不是一个可运行队列,目的是
帮助认识线程并不都是以某种有保障的顺序排列唱呢个一个队列的事实。
9、尽管我们没有无法控制线程调度程序,但可以通过别的方式来影响线程调度的方
式。
发表评论
-
一致性hash的Java实现
2018-04-07 11:57 1357关于一致性hash的讲解有很多,也不难理解,具体可以翻看其他 ... -
java.util.Timer源代码解读
2018-04-03 21:26 1529相关类: Timer : 创建定时任务调度的主类 ... -
jdbc的ResultSet结果集,数字类型的null取出后为0
2017-03-06 19:14 7393数据库里面的int,decimal等类型的字段值为null, ... -
Java中Thread的Interrupt与终止线程
2017-03-05 18:14 3760有时候我们会需要将正在执行的线程进行打断,可能我们会想到使 ... -
java中的Thread类的join
2017-03-05 16:43 2373join是Thread的实例方法,官方解释为:等待该线程终 ... -
Java的Thread,Runnable、Callable、Future、FutureTask、Executors,ExecutorService
2017-03-05 09:53 1338定义解释 Runnable ... -
springMVC响应json结果生成is开头的属性
2017-02-14 16:45 1136本来在开发中尽量不用以is开头的变量名的,但是因为开发中用 ... -
springMVC源码解读总结
2017-02-13 20:05 799HandlerMapping负责管理Web请求到具体的处 ... -
跳出多重for循环
2017-02-10 13:29 13071、变量标记形式,循环层级太多比较麻烦。 boolean ... -
Calender不是单例
2014-11-19 08:39 1902在我们使用Calender的时候,使用过 ... -
java中的值传递,引用传递
2014-11-19 08:14 1540无意中看到一个问题,java是值传递还是引 ... -
java设计模式-单例模式
2014-11-17 22:00 960单例模式1,饿汉模式 //饿汉式单例类 ... -
jacob操作office分享
2014-07-29 16:54 46922现在的项目中操作word文件比较多,word文件的加密解 ... -
java之Scoket 客户端和服务器的发送与接收
2012-08-21 15:05 40237什么是socket 所谓socket通常也称 ... -
java设计模式- Factory Method(工厂方法)模式
2012-08-20 14:24 2005Factory Method定义 ... -
java设计模式- abstract Factory (抽象工厂)模式
2012-08-20 11:32 4669Abstract Factory定义 为一系列相 ... -
java设计模式-Adapter(适配器)模式
2012-08-20 09:33 1269参考:http://www.java3z.com/cw ... -
java设计模式-Visitor(访问者)模式
2012-08-17 15:46 1888visitor定义 作用于某个对象群中各 ... -
java设计模式-Mediator(中介者)模式
2012-08-17 12:44 7208Mediator中介者模式定义 Mediator ... -
java设计模式-Template Method(模板方法)模式
2012-08-17 09:33 1146模板是指在薄片塑料板上面写字后挖空,再使用毛笔或 ...
相关推荐
《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...
### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...
本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作式线程调度)** 在Java中,线程的协同主要通过`wait()`和`notify()`或`notifyAll()`...
本资源摘要信息将围绕JAVA多线程售票系统展开,涵盖多线程编程、同步机制和售票系统的设计思想。 多线程编程 在JAVA中,多线程编程是指在一个程序中使用多个线程来执行不同的任务,以提高程序的性能和效率。在本例...
本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量数据切分,并进行并行处理,以提高数据处理速度。 首先,我们需要理解Java中的线程机制。Java通过`Thread`类来创建和管理线程。每个线程...
### Java多线程编程实现 在Java中,多线程是一种强大的工具,它允许程序同时执行多个任务。本文将详细解析一个示例程序,该程序通过`CountDownLatch`来协调主线程与多个子线程之间的执行流程。 #### 主线程(Main...
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...
Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...
【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,极大地提高了效率。本实例将探讨如何利用Java实现一个具有进度条显示功能的多线程应用。进度条通常用于可视化地表示某个任务的完成程度,这对于长...
Java多线程聊天程序是一种利用Java编程语言实现的并发通信应用,它允许多个用户在同一时间进行交互式的对话。在这个程序中,多线程技术被用来处理并发用户输入和消息传递,确保系统的高效运行和响应性。下面将详细...
【Java多线程迷宫生成程序】是一种利用Java编程语言实现的、基于多线程技术的动态迷宫生成示例。这个小程序展示了如何在计算机图形学中应用多线程来实时生成随机迷宫,同时也提供了视觉动画效果,使得观察迷宫生成的...
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...
总的来说,这个项目涵盖了Java多线程编程中的诸多重要知识点,包括线程创建与管理、并发控制、异常处理、事务一致性以及测试。通过实际操作,开发者可以深入理解并掌握这些关键概念和技术,提升自己的编程能力。
在Java编程语言中,多线程是实现并发执行任务的关键技术。这个“java多线程控制的赛跑程序”是一个示例,展示了如何利用多线程来模拟一场赛跑...通过深入研究和分析,你可以进一步提升自己在Java多线程编程方面的技能。
在这个场景中,"java多线程下载图片"意味着我们将探讨如何使用Java来实现一个能够异步下载多个图片的系统。 首先,我们需要理解Java中的线程是如何创建和运行的。Java提供了两种创建线程的方式:继承Thread类和实现...
在Java编程领域,多线程技术是实现高效...总之,"JAVA多线程聊天工具"是一个涵盖Java多线程、网络编程、并发控制等多个技术领域的项目,通过实践它可以深入理解和掌握这些关键技术,同时也能锻炼到实际的软件开发能力。
Java多线程聊天室源码是一个实用的编程示例,它展示...理解并实践这些知识点将有助于开发者掌握Java多线程编程,以及构建实时交互系统的技能。通过分析和修改这样的源代码,初学者可以进一步加深对Java并发编程的理解。
Java的多线程编程是开发高并发应用的关键技术之一,主要涉及到线程的创建、运行、调度、同步以及生命周期管理。...理解并掌握这些Java多线程编程的核心概念和实践,对于编写高效、稳定的应用至关重要。
总之,Java多线程断点下载是一个涉及网络编程、并发控制和GUI交互的综合实践。通过理解并掌握这些知识点,开发者能够编写出高效且用户体验良好的下载工具。在实际开发中,我们还需要关注线程安全、资源管理等问题,...