`
yznxing
  • 浏览: 370016 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于java中的线程的学习

    博客分类:
  • java
阅读更多

1:   关于异步编程的callback实现。

主要实现为:通过定义callback接口,在主线程中重新开一个线程去执行某项任务,然后任务完成后。再回调主线程来继续下面的逻辑:

代码:
接口 :callback(还以为这个是JDK的,哪知道自己写都行。。。没那么神秘的!)

public interface Callback 
public void execute(Object... objects); 
}

主线程类:
/* 
* 简单本地发送异步消息的类 * * 
*/ 
public class Local implements Callback, Runnable 
{
/**
  * 远程接收消息的类,模拟point-to-point
  */
private Remote remote;

/**
  * 发送出去的消息
  */
private String message;

public Local(Remote remote, String message) {
super();
this.remote = remote;
this.message = message;
}
/**
  * 发送消息
  */
public void sendMessage() {
/** 当前线程的名称 **/
System.out.println(Thread.currentThread().getName());
/** 创建一个新的线程发送消息 **/
Thread thread = new Thread(this);
thread.start();
/** 当前线程继续执行 **/
System.out.println("Message has been sent by Local~!");
}
/**
  * 发送消息后的回调函数
  */
public void execute(Object... objects) {
/** 打印返回的消息 **/
System.out.println(objects[0]);
/** 打印发送消息的线程名称 **/
System.out.println(Thread.currentThread().getName());
/** 中断发送消息的线程 **/
Thread.interrupted();
}
public void run() {
remote.executeMessage(message, this);

}
public static void main(String[] args) {
Local local = new Local(new Remote(), "Hello");

local.sendMessage();
}

远程实现类,异步回调的:
public class Remote {
/**
  * 处理消息
 
  * @param msg
  *            接收的消息
  * @param callBack
  *            回调函数处理类
  */
public void executeMessage(String msg, Callback callback) {
/** 模拟远程类正在处理其他事情,可能需要花费许多时间 **/

  Thread.sleep(2);
/** 处理完其他事情,现在来处理消息 **/
System.out.println(msg);
System.out.println("I hava executed the message by Local");
/** 执行回调 **/
callback.execute(new String[] { "Nice to meet you~!" });
}

这种方法感觉不怎么好用;

 本地主线程local类实现了callback接口和线程runnable接口。该类的业务逻辑为sendMessage;
 在该方法中,通过新建一个线程来实现,新建的线程start就会执行remote的异步方法。
Thread thread = new Thread(this);
thread.start();
/** 当前线程继续执行 **/
System.out.println("Message has been sent by Local~!");
 remote可以异步的执行,当前的主线程也能继续向下执行。当remote执行完应该的业务逻辑  后,就会调用callback接口的execute方法。从而实现回调。

 这算是一种代码的结构模式。实现异步的模式。


2:关于线程 的join学习

线程的join方法应该就是一种实现同步的方法。按照我的理解就是允许主线程在执行过程中,让另外一个线程也同步执行。因为一般情况下,重新new一个线程,然后用这个线程的start方法,主线程会不管这个new出来的线程,接着向下执行的。
示例代码:

public class JoinTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableImpl());
t.start();
try {
System.out.println("BeginJoin");
t.join(1000);
System.out.println("joinFinish");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}
}

class RunnableImpl implements Runnable {

public void run() {
try {
System.out.println("Begin sleep");
Thread.sleep(1000);
System.out.println("End sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
t.join(XX)这个XX 是等待的时间。如果设为0就表示要一直等到t这个线程死亡。


3:关于线程 的Future学习

        按照我的理解,future其实就是由返回值的多线程的操作。
       Future的接口中,有一个get()方法。也就是用来获得线程返回值的方法。

       使用future来进行这种实现,可以用future的实现接口类FutureTask,该类同时实现了Future接口和Runnable接口。

public class ConcurrentImpl {
public static void main(String[] args) throws InterruptedException,
Exception {
FutureTask fr = new FutureTask(new Returnresult());
new Thread(fr).start();
// main线程无需等待,不会被阻塞。
// 模仿 干自己的活 2s。
Thread.sleep(2000);
// 估计算完了吧 取取试试。
System.out.println("过来2s了,看看有结果吗?");
if (!fr.isDone()) {
System.out.println("还没有完成呢! 继续干自己活吧!");
}
// 模仿 干自己的活 4s。
Thread.sleep(4000);
System.out.println("过来4s了,看看有结果吗?");
if (fr.isDone()) {
System.out.println("完成了!");
System.out.println("Result:" + fr.get());
}
}
}


public class Returnresult implements Callable {

public Object call() throws Exception {
// 模仿大量耗时计算后(5s)返回结果。
System.out.println("GenerateResultThread开始进行计算了!");
Thread.sleep(1000);
return "ResultByGenerateResultThread";
}
}

  使用future后,就可以进行异步,接着处理自己的事情,然后过一会看看处理完没,处理完了再进行相关事情的处理。但是不会像callback那样,另外一个线程执行完逻辑后自动通知主线程处理完成了。

各种方式都各有优缺点~~~

 

 

0
0
分享到:
评论

相关推荐

    Java多线程学习Java多线程学习Java多线程学习Java多线程学习.txt

    Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java多线程学习Java...

    java多线程学习

    在学习Java多线程的过程中,理解线程与进程的概念是非常基础且重要的一步。首先,进程是一个程序的执行实例,是操作系统资源分配的基本单位,具有独立的地址空间和运行状态。每个进程至少包含一个线程,我们称之为...

    JAVA多线程学习内容

    总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个方面,深入理解和掌握这些知识点对于提升Java程序的性能和复杂性至关重要。通过阅读提供的"Java多线程.pdf"文档,你可以进一步了解和...

    java多线程学习资料

    ### Java多线程学习资料知识点解析 #### 一、引言 Java作为一种广泛使用的编程语言,在并发编程领域具有独特的优势。多线程是Java中实现并发处理的核心技术之一,能够显著提升程序的性能和响应性。本文将深入探讨...

    java多线程学习-ftp上传

    Java多线程学习是编程领域中的重要一环,特别是在服务器端和网络编程中,多线程技术能够有效地利用系统资源,提高程序的并发性。FTP(File Transfer Protocol)上传则是通过网络将本地文件传输到远程服务器的过程。...

    Java线程学习和总结

    本文档("Java线程学习和总结.htm")可能包含了更多关于线程的实例、源码分析和常见问题解决方案,你可以通过阅读来进一步加深对Java线程的理解。同时,"Java线程学习和总结.files"目录下的文件可能是与文章相关的...

    JAVA 多线程学习笔记

    Java线程有五种状态:新建、就绪、运行、阻塞和终止。`Thread.State`枚举类型表示这些状态,理解它们有助于优化线程管理。 三、线程同步 1. 同步机制:为了解决多线程并发访问共享资源导致的数据不一致问题,Java...

    java多线程学习视频

    Java多线程是一块重要的内容,李兴华讲解的Java是一个很好的资源

    深入学习:Java多线程编程

    《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...

    Java线程 学习

    ### Java线程学习知识点 #### 一、Java线程概览 - **定义与作用**:线程是在程序中独立且并发执行的路径。在Java中,线程被设计为语言的一部分,而不是作为操作系统的底层工具。每个Java程序至少包含一个主线程,在...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...

    java线程 线程学习资料 java线程教程

    ### Java线程教程知识点梳理 #### 一、教程概述 - **目标读者**: 本教程主要面向具备丰富Java基础知识但缺乏多线程编程经验的学习者。 - **学习成果**: 学习者能够掌握编写简单的多线程程序的能力,并能够理解和...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    汪文君JAVA多线程编程实战(完整不加密)

    学习《汪文君JAVA多线程编程实战》不仅能够提高读者对Java多线程编程的理解,还有助于培养良好的并发编程习惯,避免常见的并发陷阱。对于想要提升自己在并发编程领域技能的Java开发者来说,这本书无疑是一份宝贵的...

    java多线程进阶

    通过深入学习这本书,开发者不仅能理解Java多线程的底层机制,还能掌握如何在实际项目中有效利用多线程技术,提升代码的并发性和可维护性。对于想要在Java并发领域进一步提升的开发者来说,这是一本不可多得的参考...

    Java 线程的学习和使用

    总的来说,理解和掌握Java线程的创建、运行、同步以及线程安全,是成为一名合格的Java开发者必不可少的技能。通过学习和实践,开发者可以编写出更加高效、健壮的多线程应用程序,以应对复杂的并发编程挑战。

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的...以上内容只是《Java多线程编程核心技术》教程中的一部分核心知识点,实际学习中还需要结合具体示例和实践来深入理解和掌握。通过学习,开发者可以编写出高效、稳定的多线程Java程序。

Global site tag (gtag.js) - Google Analytics