- 浏览: 593864 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
package com.thread; /** * 创建两个线程,一个线程循环10次,另一个线程100次,两者交替运行50次 * 即到A线程时,它运行本身循环的10次之后;马上轮到B线程,它则运行本身的100次循环 * 以此轮换切换线程共50次 */ public class ThreadTest { public static void main(String[] args) { final Business business=new Business(); //子线程 new Thread(new Runnable() { public void run() { // 每次执行完都会进行唤醒其他方法执行 for (int i = 0; i < 50; i++) { try { business.sub(i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); //----------------------------线程二------------------------------------------------- //main方法本身是个线程,即线程二运行代码直接放到main方法中 for (int i = 0; i < 50; i++) { try { business.main(i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Business{ private boolean isSub=true;//当前运行的方法是sub() //线程一 public synchronized void sub(int i) throws InterruptedException { while (!isSub) { this.wait(); } for (int j = 0; j < 10; j++) { System.out.println("sub thread sequence is "+j+" and loop is "+i); } isSub = false; this.notify(); } //主线程,即main public synchronized void main(int i) throws InterruptedException{ while (isSub) { this.wait(); } for (int j = 0; j < 100; j++) { System.out.println("main thread sequence is "+j+" and loop is "+i); } isSub = true; this.notify(); } }
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1225在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 942java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 636(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 979server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1694在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 475/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1606REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11521.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1607如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 646传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4901.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2425MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1772java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1085Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 429import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 665CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3111、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2139import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7801.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 579注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
线程代表了程序中的执行流,可以在不同的线程之间切换以共享CPU时间。线程的状态包括新建、运行、中断和死亡。线程的生命周期始于新建,通过调用start()方法进入就绪状态,然后可能进入运行、阻塞或等待,最后在run...
Java提供了多种同步机制,如synchronized关键字、wait()和notify()方法、Lock接口以及相关的实现类如ReentrantLock。这些机制确保了在并发环境中,对共享资源的访问是有序和安全的。 异常处理在多线程编程中同样...
3. **线程通信**:实现线程间的数据交换和状态通知,通常借助于`wait()`, `notify()`, `synchronized`等机制。 综上所述,Java多线程编程不仅提供了强大的并发执行能力,同时也带来了复杂度更高的问题,需要开发者...
- **等待/唤醒机制**:通过`wait()`、`notify()`和`notifyAll()`方法实现线程间的等待和唤醒。 ##### 3. 线程的状态和生命周期 线程在其生命周期中会经历不同的状态,包括新建(`NEW`)、就绪(`RUNNABLE`)、阻塞(`...
- **线程间通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的协作,需要在同步块或方法中使用。 3. **线程池** - **Executor框架**:`ExecutorService`、`ThreadPoolExecutor`和`Executors`工厂类...
Java线程具有创建、就绪、运行、阻塞和死亡五种状态。创建状态是指用new操作创建了一个Thread实例,但尚未调用start()方法;就绪状态是指线程可以运行,但CPU还未分配时间片;运行状态是指线程获得CPU时间片,正在...
另外,wait()、notify()和notifyAll()用于线程间通信,这些方法需要在同步块或同步方法中使用,以防止唤醒错误的线程。 总的来说,Java多线程提供了一套强大的工具和机制,使得开发者能够编写出高效、安全的并发...
线程同步是解决线程间共享数据时可能出现的问题,如死锁、活锁和饥饿,Java提供了`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(如`ReentrantLock`)来实现线程安全。...
3. **线程通信**:Java的`wait()`, `notify()`, `notifyAll()`方法用于线程间的通信,以及`BlockingQueue`等并发容器在通信中的应用,也是书中重点内容。此外,可能会探讨`join()`, `Thread.yield()`等控制线程行为...
"基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。
在多线程环境中,数据共享可能导致竞态条件和死锁,Java提供了多种同步机制来避免这些问题,如synchronized关键字、volatile变量、Lock接口(ReentrantLock、Semaphore等)以及wait()、notify()和notifyAll()方法。...
Java提供了多种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(包括`ReentrantLock`等)来避免竞态条件和死锁的发生,确保共享数据在多线程环境下的正确性。...
Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了Java线程的多个关键知识点。 首先,线程是一个程序内部的顺序控制流,它是执行...
2. **wait/notify机制**:在线程间进行通信,`wait()`、`notify()`和`notifyAll()`方法在`Object`类中,需在同步块或方法中使用,用于线程间的等待和唤醒。 3. **volatile关键字**:用于确保多线程环境下的可见性和...
wait()、notify()和notifyAll()方法用于线程间的通信,使得线程可以等待特定条件满足后再继续执行;还有volatile关键字保证了多线程环境下的可见性和有序性,避免了线程缓存造成的数据不一致。 在这个实例中,我们...
- **线程同步**:为了避免多线程环境下数据的不一致性,Java提供了synchronized关键字、wait()、notify()等机制进行线程同步。 2. **线程动画原理** - **事件驱动模型**:GUI应用通常基于事件驱动模型,用户操作...
#### 七、Java线程运行机制 Java虚拟机(JVM)通过线程执行程序代码。每个线程都有自己的程序计数器和方法调用栈。 - **程序计数器**:指示当前线程正在执行的方法中的下一条字节码指令。 - **方法调用栈**:...
4. wait(), notify(), notifyAll()方法:在线程间进行协作,但必须在同步块或方法中使用。 5. Condition接口:允许更细粒度的线程控制。 此外,Java并发库(java.util.concurrent)提供了一些高级工具,如...