- 浏览: 659324 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
通过实现Runnable来实现多线程:
通过继承Thread来实现多线程:
注意:继承了Thread,那么不用再new Thread来起线程,直接用Runner1.start()即可
通过Thread.join()方法来等待当前线程走完
下面的程序,如果join了,那么n就等于1000
在多线程中如何传递参数:
简单的是通过构造函数和set()来传值
复杂的是通过回调函数传值
下面的代码描述了回调传值的用法:
这个程序可能会输出"NULL":
因为线程可能还没有赋值就已经syso了。
解决办法是在start()后面加个join();
public class TestThread1{ public static void main(String[] args){ Runner1 r = new Runner1(); Thread t = new Thread(r); t.start(); //注意:t.run(); 是指方法调用,先执行Runner1()后,再往下执行。 for(int i=200; i<300; i++){ System.out.println("main--" + i); } } } class Runner1 implements Runnable{ public void run(){ for(int i=0; i<100; i++){ System.out.println("Runner1--" + i); } } }
public class Test1 implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("Thread: " + i ); try { Thread.sleep((int)Math.random() * 200); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Test1 t1 = new Test1(); Thread t_1 = new Thread(t1); t_1.setName("aaa"); t_1.start(); for (int i = 0; i < 10; i++) { System.out.println("main: " + i ); try { Thread.sleep((int)Math.random() * 200); } catch (InterruptedException e) { e.printStackTrace(); } } } }
通过继承Thread来实现多线程:
public class TestThread1{ public static void main(String[] args){ Runner1 r = new Runner1(); r.start(); for(int i=200; i<300; i++){ System.out.println("main--" + i); } } } class Runner1 extends Thread{ public void run(){ for(int i=0; i<100; i++){ System.out.println("Runner1--" + i); } } }
注意:继承了Thread,那么不用再new Thread来起线程,直接用Runner1.start()即可
通过Thread.join()方法来等待当前线程走完
下面的程序,如果join了,那么n就等于1000
public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++, n++) try { sleep(3); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception { Thread threads[] = new Thread[100]; for (int i = 0; i < threads.length; i++) // 建立100个线程 threads[i] = new Test4(); for (int i = 0; i < threads.length; i++) // 运行刚才建立的100个线程 threads[i].start(); if (args.length > 0){ for (int i = 0; i < threads.length; i++){ // 100个线程都执行完后继续 threads[i].join(); } } System.out.println("n=" + Test4.n); }
在多线程中如何传递参数:
简单的是通过构造函数和set()来传值
复杂的是通过回调函数传值
下面的代码描述了回调传值的用法:
package com.mhm.test; public class Test5 extends Thread { private Work work; public Test5(Work work) { this.work = work; } public void run() { java.util.Random random = new java.util.Random(); Data data = new Data(); int n1 = random.nextInt(1000); int n2 = random.nextInt(2000); int n3 = random.nextInt(3000); work.process(data, n1, n2, n3); // 使用回调函数 System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+" + String.valueOf(n3) + "=" + data.value); } public static void main(String[] args) { Thread t1 = new Test5(new Work()); Thread t2 = new Test5(new Work()); Thread t3 = new Test5(new Work()); t1.start(); t2.start(); t3.start(); } } class Data { public int value = 0; } class Work { public void process(Data data, Integer... numbers) { for (int n : numbers) { data.value += n; } } }
这个程序可能会输出"NULL":
因为线程可能还没有赋值就已经syso了。
解决办法是在start()后面加个join();
package com.mhm.test; public class Test6 extends Thread { private String value1; private String value2; public void run() { value1 = "通过成员变量返回数据"; value2 = "通过成员方法返回数据"; } public static void main(String[] args) throws Exception { Test6 thread = new Test6(); thread.start(); System.out.println("value1:" + thread.value1); System.out.println("value2:" + thread.value2); } }
发表评论
-
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
2014-08-07 13:10 2324package test1; import j ... -
java 多线程 笔试题
2014-08-07 12:30 12591、4线程,2个对i加,2个对i减 2、实现孙线程 ... -
基于ArrayBlockingQueue的生产者和消费者
2014-08-06 23:02 741学习写的测试,可能有BUG。 有了ArrayBlocki ... -
每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完
2014-08-06 17:20 1166原来的程序: package test1; publ ... -
通过semaphore信号灯,开启多个线程,但只并发3个线程
2014-08-04 22:07 920package com.mhm.test1; ... -
用锁实现缓存机制
2014-08-01 14:11 824package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:50 858package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:49 1package test1; import ja ... -
通过代码,解释ExecutorService基本用法
2014-07-29 17:49 596package test1; import ja ... -
4线程,2个对i加,2个对i减
2014-07-29 16:23 857package test1; /** * 设计 ... -
简单多线程卖票代码
2014-07-29 15:45 852public class Thread2 { pu ... -
通过代码,了解ThreadLocal
2014-07-29 14:06 539在看此代码时,先看http://www.iteye.com ... -
子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次
2014-07-28 22:21 790package com.mhm.test1; / ... -
synchronized 在多线程中的一些 理论
2011-04-22 10:58 809package com.mhm.test; public ... -
为什么要在多线程中进行数据同步
2011-04-21 17:28 1053package com.mhm.test; public ... -
多线程理论知识
2011-04-21 11:58 889Java中建立线程有两种方法,一种是继承Thread类 ... -
多线程之:生产者消费者
2011-01-07 14:55 995一直纠结与生产和消费完后为什么要sleep(),现在终于搞明白 ... -
线程模仿 ATM取钱
2011-01-07 11:12 1077自己写着学习用的 public class TestThre ... -
线程的同步
2011-01-05 17:26 947线程的同步: public class TestSync im ... -
线程的状态
2011-01-05 11:45 957线程的状态:
相关推荐
通过理解多线程的基本概念,掌握易语言中的线程创建和管理方法,以及注意线程安全和同步,你可以编写出高效且稳定的多线程程序。在实际开发中,不断实践和优化,将是提升多线程编程能力的关键。
在多线程编程中,有以下几个关键概念: 1. 线程安全:当多个线程访问同一数据时,如果代码能保证数据的完整性和一致性,那么我们就说这个代码是线程安全的。为了实现线程安全,通常需要使用锁(如互斥量、信号量)或...
标题中的“多线程 小球 运行程序(eclipse工程可导入)”表明这是一个与多线程编程相关的项目,可能是用Java语言实现的,因为Eclipse是Java开发的常用集成开发环境。这个程序可能设计了一个模拟小球运动的场景,通过多...
标题 "C#线程相关几个小程序" 涉及到的是C#编程语言中的多线程技术,这是软件开发中非常关键的一个部分,特别是在需要同时处理多个任务或提高程序响应速度时。C#提供了丰富的线程支持,让我们来详细探讨一下相关知识...
标题 "一个多线程下载程序" 描述了一个使用VC++编程语言实现的软件,该软件能够通过多线程技术加速文件的下载过程。多线程下载是现代互联网应用程序中常见的优化技术,尤其对于大文件下载,它能显著提高下载速度,...
这个简易的实现为初学者提供了一个很好的起点,让大家了解多线程的基本概念和用法。 首先,要使用C++的多线程功能,我们需要包含`<thread>`头文件,并链接`stdc++fs`库。C++11引入了`std::thread`类,用于创建和...
本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有...
在聊天程序中,多线程的应用场景通常包括以下几个方面: 1. **接收线程**:这个线程负责从网络接收数据,例如,当用户在网络上的其他设备发送消息时,接收线程会持续监听网络连接,一旦接收到新数据,就将其解析并...
1. **线程概念**:线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。多线程意味着在一个程序中同时执行多个任务,可以显著提高CPU资源的利用率。 2. **线程同步与互斥**:在多线程环境中,...
### Java多线程几个核心概念 #### 一、理解多线程 多线程是一种让程序内部的不同任务或计算能够并发执行的技术。在Java中,多线程的应用极为广泛,可以大大提高程序的效率和响应性。多线程的核心概念包括以下几个...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...
多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中创建和管理线程,包括启动线程、终止线程、挂...
本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...
在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 首先,让我们深入理解多线程的概念。线程是操作系统分配处理器时间的基本...
在IT领域,多线程和端口通信是两个重要的概念,尤其在开发高效能和实时性的应用程序时。本文将深入探讨这两个主题,并结合"多线程端口通信小程序"的描述,来理解如何利用多线程技术进行串行端口(如COM口)的数据...
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
在深入探索 POSIX 多线程程序设计之前,我们需要了解POSIX(可移植操作系统接口)是一个定义一系列UNIX系统服务的接口标准,这些服务包括文件处理、进程控制、信号处理、定时器、多线程等,POSIX标准让编写的应用...
Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...
在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键精灵”中,多线程的应用能够显著提升其性能和实用性。 标题“多线程_...