- 浏览: 662301 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (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 2338package test1; import j ... -
java 多线程 笔试题
2014-08-07 12:30 12651、4线程,2个对i加,2个对i减 2、实现孙线程 ... -
基于ArrayBlockingQueue的生产者和消费者
2014-08-06 23:02 751学习写的测试,可能有BUG。 有了ArrayBlocki ... -
每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完
2014-08-06 17:20 1170原来的程序: package test1; publ ... -
通过semaphore信号灯,开启多个线程,但只并发3个线程
2014-08-04 22:07 928package com.mhm.test1; ... -
用锁实现缓存机制
2014-08-01 14:11 832package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:50 867package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:49 1package test1; import ja ... -
通过代码,解释ExecutorService基本用法
2014-07-29 17:49 601package test1; import ja ... -
4线程,2个对i加,2个对i减
2014-07-29 16:23 864package test1; /** * 设计 ... -
简单多线程卖票代码
2014-07-29 15:45 855public class Thread2 { pu ... -
通过代码,了解ThreadLocal
2014-07-29 14:06 547在看此代码时,先看http://www.iteye.com ... -
子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次
2014-07-28 22:21 795package com.mhm.test1; / ... -
synchronized 在多线程中的一些 理论
2011-04-22 10:58 815package com.mhm.test; public ... -
为什么要在多线程中进行数据同步
2011-04-21 17:28 1059package com.mhm.test; public ... -
多线程理论知识
2011-04-21 11:58 897Java中建立线程有两种方法,一种是继承Thread类 ... -
多线程之:生产者消费者
2011-01-07 14:55 999一直纠结与生产和消费完后为什么要sleep(),现在终于搞明白 ... -
线程模仿 ATM取钱
2011-01-07 11:12 1086自己写着学习用的 public class TestThre ... -
线程的同步
2011-01-05 17:26 951线程的同步: public class TestSync im ... -
线程的状态
2011-01-05 11:45 980线程的状态:
相关推荐
通过理解多线程的基本概念,掌握易语言中的线程创建和管理方法,以及注意线程安全和同步,你可以编写出高效且稳定的多线程程序。在实际开发中,不断实践和优化,将是提升多线程编程能力的关键。
标题 "C#线程相关几个小程序" 涉及到的是C#编程语言中的多线程技术,这是软件开发中非常关键的一个部分,特别是在需要同时处理多个任务或提高程序响应速度时。C#提供了丰富的线程支持,让我们来详细探讨一下相关知识...
标题 "一个多线程下载程序" 描述了一个使用VC++编程语言实现的软件,该软件能够通过多线程技术加速文件的下载过程。多线程下载是现代互联网应用程序中常见的优化技术,尤其对于大文件下载,它能显著提高下载速度,...
多线程是指一个程序内可以同时执行多个独立的执行流,每个执行流被称为一个线程。在易语言中,我们可以通过创建线程对象来实现多线程。线程间可以并行或交替执行,提高了程序的响应速度和资源利用率。在处理大量数据...
这个简易的实现为初学者提供了一个很好的起点,让大家了解多线程的基本概念和用法。 首先,要使用C++的多线程功能,我们需要包含`<thread>`头文件,并链接`stdc++fs`库。C++11引入了`std::thread`类,用于创建和...
本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有...
在聊天程序中,多线程的应用场景通常包括以下几个方面: 1. **接收线程**:这个线程负责从网络接收数据,例如,当用户在网络上的其他设备发送消息时,接收线程会持续监听网络连接,一旦接收到新数据,就将其解析并...
1. **线程概念**:线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。多线程意味着在一个程序中同时执行多个任务,可以显著提高CPU资源的利用率。 2. **线程同步与互斥**:在多线程环境中,...
### Java多线程几个核心概念 #### 一、理解多线程 多线程是一种让程序内部的不同任务或计算能够并发执行的技术。在Java中,多线程的应用极为广泛,可以大大提高程序的效率和响应性。多线程的核心概念包括以下几个...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...
本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...
在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 首先,让我们深入理解多线程的概念。线程是操作系统分配处理器时间的基本...
在本案例中,"操作系统 多线程演示程序" 是一个基于VC++的可视化应用,用于模拟多线程间的信号量传递,以帮助理解多线程编程的基本原理和实践。 多线程的概念源于并发性,它允许多个任务或子任务并行执行,提高了...
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
在深入探索 POSIX 多线程程序设计之前,我们需要了解POSIX(可移植操作系统接口)是一个定义一系列UNIX系统服务的接口标准,这些服务包括文件处理、进程控制、信号处理、定时器、多线程等,POSIX标准让编写的应用...
Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...
在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键精灵”中,多线程的应用能够显著提升其性能和实用性。 标题“多线程_...
本书首先会介绍多线程的基本概念,包括线程的创建、销毁以及线程间的通信。线程创建通常通过调用CreateThread函数实现,而销毁则涉及TerminateThread或退出线程的主循环。线程间通信是多线程程序中的重要部分,可以...