`
yznxing
  • 浏览: 366928 次
  • 性别: 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多线程学习内容

    JAVA多线程学习,提高JAVA性能,多线程并列. JAVA高级学习内容。

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

    java线程 线程 教程 java线程教程 java线程学习资料 本教程有什么内容? 本教程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用...

    java多线程学习

    主要是结合课本和视频学习了一下java多线程的用法,这个专利适合于初学者学习多线程知识。

    java多线程笔记

    三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的...

    java多线程学习视频

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

    java多线程学习-ftp上传

    java多线程学习-ftp上传

    Java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-...

    java多线程学习资料

    java多线程,来自java编程思想!内容很详细,适合于初学者。

    java多线程学习java多线程学习.docx

    java多线程学习java多线程学习

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

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

    Java 线程的学习和使用

    Java 线程的学习和使用Java 线程的学习和使用

    java多线程核心技术

    结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如服务器、数据库、应用。多线程可以有效提升计算和处理效率,大大提升吞吐量和可伸缩性,...

    corejava多线程学习总结.pdf

    corejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习...

    Java多线程编程经验

    现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程

    java线程学习笔记

    java线程学习笔记

    【JAVA多线程】多线程编程核心技术学习资料

    【JAVA多线程】多线程编程核心技术学习资料。学习java多线程学习资料文档。适合初中级java开发人员学习的书籍资料

    JAVA线程学习(源代码)

    附带JAVA线程源代码,从代码中分析和学习java线程。

    《Java多线程设计模式》附源码中文教程 (PDF)

    本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...

    java多线程和定时器学习

    java多线程和定时器学习,代码和文档都有,很详细

Global site tag (gtag.js) - Google Analytics