- 浏览: 599610 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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)
最新评论
join() 方法主要是让调用该方法的线程完成run方法里面的东西后,再执行join()方法后面的代码。
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。
class ThreadTesterA implements Runnable { private int counter; @Override public void run() { while (counter <= 10) { System.out.print("Counter = " + counter + " "); counter++; } System.out.println(); } } class ThreadTesterB implements Runnable { private int i; @Override public void run() { while (i <= 10) { System.out.print("i = " + i + " "); i++; } System.out.println(); } } public class ThreadTester { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new ThreadTesterA()); Thread t2 = new Thread(new ThreadTesterB()); t1.start(); t1.join(); // wait t1 to be finished t2.start(); t2.join(); // in this program, this may be removed } }
package mythread; public class JoinThread extends Thread { public static int n = 0 ; public static synchronized void inc(){ n ++ ; } public void run(){ for ( int i = 0 ; i < 10 ; i ++ ) try { inc(); // n = n + 1 改成了 inc(); 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 JoinThread(); for ( int i = 0 ; i < threads.length; i ++ ) // 运行刚才建立的100个线程 threads[i].start(); for ( int i = 0 ; i < threads.length; i ++ ) // 100个线程都执行完后继续 必须加上join方法 threads[i].join(); System.out.println( " n= " + JoinThread.n); } }
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1232在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 953java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 643(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 990server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1704在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 480/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1621REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11741.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1617如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 654传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4951.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2453MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1775java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1090Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 432import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 673CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3251、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2152import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7911.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 584注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
`Thread.join()`方法允许主线程等待特定线程结束。例如,如果有多个子线程,我们可以在每个子线程执行`join()`,这样主线程会依次等待每个子线程完成。例如: ```java Thread thread1 = new Thread(...); Thread ...
join()方法是Thread类中的一个实例方法,当一个线程A执行了threadB.join()操作时,线程A会等待线程B执行完成后才继续执行。这通常用于需要等待子线程完成之后才继续执行的情况。 以上就是对Java线程中wait、await、...
`Thread.join()`可以让主线程等待子线程完成后再继续执行。 “异步”标签则涉及到了程序设计中的非阻塞特性,有助于提升系统的并发能力和响应性。Java 8引入的CompletableFuture提供了一种更高级的异步编程模型,...
Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...
- `join()`方法让调用的线程等待目标线程执行完毕后再继续执行。 2. **`synchronized`关键字**: - `synchronized`用于实现线程同步,防止数据的不一致性。它可以修饰方法或代码块,当一个线程进入同步块/方法后...
它可以确保当前线程在调用`join`的线程执行完其所有任务后才继续执行,从而实现线程间的同步。`join`方法有一个可选的时间参数,可以设置等待的最长时间,超过这个时间还没结束,当前线程将不再等待并继续执行。这在...
2. 就绪状态(Runnable):调用Thread对象的start()方法后,线程进入就绪状态,表示线程准备运行,但不保证立即执行,需要等待CPU调度。 3. 运行状态(Running):CPU调度到就绪状态的线程后,线程开始执行run()...
- 继承Thread类:创建一个新的类,继承自Thread类,重写run()方法,然后创建该类的对象并调用start()方法启动线程。 - 实现Runnable接口:创建一个实现Runnable接口的类,重写run()方法,然后将该对象作为参数传递...
`join()`函数会阻塞调用线程(这里是主线程)直到被join的线程(`worker`线程)执行完毕。这意味着主线程会暂停执行,直到`workerFunction`函数执行完毕。 除了`join()`,C++标准库还提供了`detach()`函数。`detach...
首先,Java提供了多种方式来管理线程间的同步,如`Thread.join()`方法、`CountDownLatch`、`CyclicBarrier`和`Semaphore`等。在这里,我们将重点讨论使用`Thread.join()`方法和`ExecutorService`结合的方式。 `...
线程的主体行为定义在`run()`方法中,当`start()`方法被调用时,线程进入可运行态,系统会根据线程调度策略来决定何时执行线程。线程的状态包括新线程态、可运行态、非运行态和死亡态。线程可以通过`sleep()`、`wait...
Java提供了一些方法来控制线程状态,如`sleep()`使线程暂停执行一段时间,`join()`等待指定线程结束,`yield()`让当前线程暂停,让其他相同优先级的线程有机会执行,`interrupt()`用于中断线程。 同步是Java线程...
join()是Thread的方法,作用是调用线程需等待该join()线程执行完成后,才能继续使用下运行。应用场景:当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 在上面的示例代码中,我们可以看到thread...
- **定时等待(Timed Waiting)**:线程处于有限期等待状态,如调用了`sleep()`或`join()`方法。 - **终止(Terminated)**:`run()`方法执行完毕或抛出未捕获异常。 3. **线程控制** - **sleep()**:让当前线程...
线程可以通过sleep()方法进入阻塞状态,通过join()方法让主线程等待子线程完成,通过wait()和notify()或notifyAll()方法进行线程间的同步与通信。 Java提供了多种线程控制机制,如synchronized关键字用于实现互斥...
线程联合(Join)是让一个线程等待另一个线程完成后再继续执行,通过调用`join()`方法实现。 9.11 守护线程: 守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,...
在这种情况下,`join`方法会让调用线程等待,直到目标线程结束或超时。如果超时,当前线程将恢复执行,并且可以通过调用`interrupt`来中断目标线程(但这并不意味着目标线程会立即停止,它可能需要在内部检查`...
`Synch.java`的`main`方法中,通过`join()`方法确保`ob1`、`ob2`和`ob3`线程按照创建的顺序执行,这也是线程同步的一种体现。 2. **线程间通信**: 在多线程环境中,线程之间可能需要交换数据或协调工作。Java提供...
一个线程调用另一个线程的join()方法,会等待该线程执行完毕后再继续执行,可以用来控制线程的执行顺序。 8. Volatile关键字: Volatile关键字可以保证线程间变量的可见性,但不能保证原子性。在多线程环境下,...
- **join() 方法**:一个线程可以使用`join()`方法等待另一个线程结束。 - **volatile 关键字**:用于标记可能被多个线程访问的变量,确保线程间的可见性和有序性。 - **synchronized 关键字**:用于实现对共享资源...