- 浏览: 1588827 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
线程停止
stop()
interrupt()
线程守护 或者 说后台运行
setDaemon(boolean flag)
线程临时加入 join()
线程优先级 和 暂停
setPriority(int newPriority)
yield()
常见 多线程应用 简单实例
stop()
interrupt()
/** * 停止线程 *stop方法已经过时 *interrupt() 强制 * * 如果停止线程? * 只有一种方法,run方法结束 * 开启多个线程运行,运行代码通常是循环结构 * * 只要控制住循环,就可以让run方法结束,也就是线程结束. * * 特殊情况 * 当线程处于冻结状态 * 就不会读取到标记. 那么线程就不会结束 * * * 当没有指定的方法让冻结的线程恢复到运行的状态时, 这是需要对冻结的线程进行清除, * 强制让线程回复到运行状态来,这样就可以操作标记让线程结束. * interrupt() 会强制唤醒冻结的线程 然后,但是 这种做法是非法的 ,所以就会抛出异常. * */ class StopThread implements Runnable{ private boolean flag=true; public synchronized void run(){ //需要 run方法运行完 加入 synchronized 和 wait 后 即使 改变 flag 也终止不了线程运行 .这是采用强制 来中断 while(flag){ try { wait(); //即使 改变 状态 线程还是没有停止 } catch (InterruptedException e) { // TODO Auto-generated catch block //e.printStackTrace(); System.out.println(Thread.currentThread().getName()+"......Exception"); flag=false; } System.out.println(Thread.currentThread().getName()+"......run"); } } public void changeFlag(){ flag=false; } } public class ThreadStopDemo { public static void main(String[] args) { // TODO Auto-generated method stub StopThread st=new StopThread(); Thread t1=new Thread(st); Thread t2=new Thread(st); t1.start(); t2.start(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } int num=0; while(true){ if(num++ ==60){ //st.changeFlag(); t1.interrupt(); t2.interrupt(); break; } System.out.println(Thread.currentThread().getName()+"...."+num); } } }
线程守护 或者 说后台运行
setDaemon(boolean flag)
/** * 守护线程 * setDaemon(boolean flag) ; 用户线程 或者 后台线程 * 当所有的前台线程运行完后,后台线程自动关闭 * */ class StopThread implements Runnable{ private boolean flag=true; public synchronized void run(){ //需要 run方法运行完 加入 synchronized 和 wait 后 即使 改变 flag 也终止不了线程运行 .这是采用强制 来中断 while(flag){ /*try { //wait(); //即使 改变 状态 线程还是没有停止 } catch (InterruptedException e) { // TODO Auto-generated catch block //e.printStackTrace(); System.out.println(Thread.currentThread().getName()+"......Exception"); flag=false; }*/ System.out.println(Thread.currentThread().getName()+"......run"); } } public void changeFlag(){ flag=false; } } public class ThreadDaemonDemo { public static void main(String[] args) { StopThread st=new StopThread(); Thread t1=new Thread(st); Thread t2=new Thread(st); t1.setDaemon(true); //在运行前将 线程标记为后台线程 让它自动 和主线程 争取 CPU 资源 t2.setDaemon(true); //加了 守护线程后 ,上面的 wait 下面的 changeFlag() interrupt() 都可以不用了 t1.start(); t2.start(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } int num=0; while(true){ if(num++ ==60){ //st.changeFlag(); //t1.interrupt(); //t2.interrupt(); break; } System.out.println(Thread.currentThread().getName()+"...."+num); } //当主线程 运行完后, 后台线程 自动停止运行. } }
线程临时加入 join()
/** * join * 当A线程 执行到 B的线程的join()方法时,A就会等待 ,等 B线程都执行完后,A才会执行. * * join: 可以用来临时加入其他线程执行. * */ class Demo implements Runnable{ public void run(){ for(int x=0;x<70;x++){ System.out.println(Thread.currentThread().getName()+"...."); } } } public class ThreadJoinDemo { public static void main(String[] args) throws InterruptedException { Demo d=new Demo(); Thread t1=new Thread(d); Thread t2=new Thread(d); t1.start(); // t1要申请到 运行中过来, t1 表示要抢夺 CPU的执行权, 此时 主线程 就处于 冻结状态. // 只有在 t1 运行结束 后 ,主线程 才能 执行 . //t1.join(); t2.start(); t1.join(); // 如果在 加入到这里后 线程中只有 t1 t2 进行交互, 谁的join 主线程就等谁 完后 就只有 t2 和 主线程抢夺CPU资源 for (int i = 0; i < 80; i++) { System.out.println("main...."+i); } System.out.println("over"); } }
线程优先级 和 暂停
setPriority(int newPriority)
yield()
/** * setPriority(int newPriority); //更线程的优先级 ,只有 10 个级别 , 默认为 5 * * yield(); 暂停现在 执行的线程对象 ,释放执行权, 执行其他线程对象. * * * */ class Demo implements Runnable{ public void run(){ for(int x=0;x<70;x++){ System.out.println(Thread.currentThread().getName()+"...."); Thread.yield(); //释放执行权 临时停止 /稍微减少 线程执行的频率 ,让交替次数多点. 尽量达到 和谐状态. } } } public class ThreadYieldDemo { public static void main(String[] args) { Demo d=new Demo(); Thread t1=new Thread(d); Thread t2=new Thread(d); t1.start(); // t1要申请到 运行中过来, t1 表示要抢夺 CPU的执行权, 此时 主线程 就处于 冻结状态. // 只有在 t1 运行结束 后 ,主线程 才能 执行 . //t1.join(); t2.start(); t2.setPriority(Thread.MAX_PRIORITY); //t1.setPriority(6); 也可以 设置优先级 //t1.join(); // 如果在 加入到这里后 线程中只有 t1 t2 进行交互, 谁的join 主线程就等谁 完后 就只有 t2 和 主线程抢夺CPU资源 for (int i = 0; i < 80; i++) { System.out.println("main...."+i); } System.out.println("over"); } }
常见 多线程应用 简单实例
public class ThreadDemo { public static void main(String[] args) { //三个不相关的代码快 这样运行效率滴 如果次数再多点的话就更低了 new Thread(){ public void run(){ for (int i = 0; i < 100; i++) { System.out.println("A"); }} }.start(); for (int i = 0; i < 100; i++) { System.out.println("B"); } new Thread( new Runnable(){ public void run(){ for (int i = 0; i < 100; i++) { System.out.println("C"); } } } ).start(); //这样 三个线程就可以同时运行了 //或则建立类型 new Thread(new ThreadTest()).start(); } } class ThreadTest implements Runnable{ public void run(){ for (int i = 0; i < 100; i++) { System.out.println("C"); } } } //这种情况下使用多线程 会提高运行效率
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 995public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2280经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5650package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 980import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1054/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1005//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1822更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1416import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 813import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2396import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 922// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1171import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 800import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1144import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3890import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 964/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1020import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1838Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1001/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2228package out; import ja ...
相关推荐
【JAVA12天全掌握】课程旨在帮助学员在12天内系统地理解和掌握Java编程语言的核心概念和技术。这不仅是一场快速学习的挑战,也是一个深度理解Java编程基础的全面之旅。通过本课程,学员将从零开始,逐步建立起扎实的...
本文介绍了如何使用Java Swing GUI框架、多线程以及日期时间处理技术来实现一个简单的多线程倒计时器。通过这个例子,读者可以了解到如何在Java中构建GUI应用程序,如何利用多线程来实现后台任务的并发执行,以及...
第12天:字符串王者地位 第13天:算法工具类包装类 第14天:正则及其他类 第15-18天:数组到集合 第19天:文件操作IO 第20、21天:IO流文件操作类图 第22天:其他流 第23天:多线程 第24天:多线程深入 第25天:GUI ...
本教程是针对零基础学习者的黑马Java辅导班第二期内容,涵盖了12天的课程精华,旨在帮助初学者快速掌握Java语言的基础知识。 【Java视频教程】 Java视频教程是学习Java的有效途径,它通过直观的视觉演示,让学习者...
6. **多线程**:Java对多线程的支持非常强大,你需要学习如何创建和管理线程,理解同步与互斥,以及线程池的概念,这对提升程序性能有很大帮助。 7. **网络编程**:Java的Socket编程能让你构建网络应用程序,理解...
12. **反射**:通过反射机制,可以在运行时动态地获取类的信息并操作对象,这是Java高级特性之一。 13. **泛型**:泛型提供了一种在编译时检查类型安全的方法,同时允许程序员编写更灵活的代码。 14. **Java API的...
7. **多线程编程**:了解线程的概念,学习Thread类和Runnable接口,掌握同步和异步操作,以及线程间的通信。 8. **JAVA Swing和JavaFX**:学习如何使用JAVA创建图形用户界面(GUI),掌握Swing组件库的使用,或者更...
6. 多线程:Java内置了对多线程的支持,使得开发并发应用变得相对简单。 7. 安全性:Java有严格的安全模型,防止恶意代码对系统造成损害。 在《21天学通Java》这本书中,读者可以接触到以下核心知识点: 1. Java...
6. **多线程**:Java提供了对多线程的支持,理解线程的创建、同步和通信,可以实现高效的并发处理。 7. **反射机制**:反射是Java的一大特色,它允许在运行时检查类、接口、字段和方法的信息,甚至动态调用方法。 ...
6. **多线程**:Java内置了对多线程的支持,包括Thread类、Runnable接口,以及同步控制方法(如synchronized关键字、wait()、notify()和notifyAll())。 7. **反射API**:Java反射机制允许在运行时动态地获取类的...
多线程编程是Java的一个重要特性,通过实现Runnable接口或继承Thread类创建线程。了解并发控制(synchronized关键字、wait/notify机制)、线程状态以及线程池的概念。 9. **文件与文件系统** 学习File类用于文件...
9. **多线程**:Java内置了对多线程的支持,你可以通过实现Runnable接口或继承Thread类来创建线程。 10. **Swing和JavaFX**:对于图形用户界面(GUI)开发,Java提供了Swing和JavaFX库。这两个库包含了各种组件和...
9. **多线程**:Java内置了对多线程的支持,学习者需要理解线程的创建、同步、生命周期管理等概念。 10. **文件和目录操作**:Java提供了File类来处理文件和目录,包括创建、删除、重命名等操作。 11. **Swing和...
10. **多线程**:Java内置了对多线程的支持,通过实现Runnable接口或继承Thread类来创建线程。了解线程的同步和通信机制,如synchronized关键字、wait()、notify()和notifyAll()方法。 11. **文件和目录操作**:...
11. **多线程**:讲解线程的创建和管理,同步机制(如synchronized关键字和wait/notify机制)以及线程池的使用。 12. **接口与抽象类**:对比接口和抽象类,理解它们在设计中的作用。 13. **反射与注解**:介绍...
11. **多线程**:Java内置了对多线程的支持,通过Thread类或实现Runnable接口创建并管理线程,理解同步和互斥的概念,能够编写并发程序。 12. **异常与日志**:在实际开发中,良好的异常处理和日志记录能帮助定位和...
11. **多线程**:学习如何创建和管理线程,同步机制(synchronized关键字、wait()、notify()、notifyAll()),以及线程池的使用。 12. **网络编程**:了解套接字(Socket)编程,包括TCP和UDP通信。 13. **Java...
11. **多线程**:掌握线程的创建与同步,包括Thread类、Runnable接口,以及synchronized关键字、wait()和notify()方法。 12. **IO流和NIO**:了解Java的IO流体系,以及New IO (NIO) 提供的非阻塞I/O操作。 13. **...
9. **多线程**:Java支持多线程编程,通过Thread类和Runnable接口可以创建并管理多个执行线程,提高程序的并发性能。 10. **Java Swing和JavaFX**:这两是Java的图形用户界面(GUI)库,用于构建桌面应用程序。...
6. **多线程**:Java支持多线程编程,了解Thread类和Runnable接口,以及同步机制(synchronized关键字、wait()、notify()和notifyAll()方法)的应用。 7. **反射机制**:深入理解Java反射机制,可以动态地获取类的...