我是靠谱客的博主 文静奇迹,最近开发中收集的这篇文章主要介绍c语言多次调用函数 只给出最后一次,一个方法连续调用多次,但方法体里面的代码只保证最后一次的执行,之前连续调用的方法体都不执行...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/**

* 最后线程执行

*

*

* 一个方法连续调用多次,但方法体里面的代码只保证最后一次的执行,之前连续调用的方法体都不执行

*

* @author 更生

* @version 2016年5月9日

*/

public class LastThread {

private long sleep;// 需要睡眠多久

private Listener listenr;// 回调

private Object value;// 携带对象

private int count = 0;// 线程标识

private Thread curr;// 当前正在执行的线程

public static final int END = -1;// 回调标记

public static final int START = 1; // 回调标记为开始

public LastThread(Listener listenr) {

this.listenr = listenr;

}

/**

* 调用此方法会启动一个新线程,如果在新线程之前还有旧线程没睡醒,那么旧线程的call方法就不会调用

*

* 假设: 9点20调用call生成一个线程T1,T1会睡眠2分钟 9点21再次调用call生成一个线程A2 由于T1没有睡醒,call方法就被再次调用,所以T1的{@link Lisntern}

* 中的call不会执行,只执行了T2的 {@link Lisntern}中的call 最后结果:{@link LastThread}中的call 调用了两次,但是 {@link Lisntern}中的call只执行了一次

*

* @param obj 允许携带的参数,@link {@link Listener}

*/

public void call(Object obj) {

start(obj);

}

/**

* 在call 之前调用,线程睡醒后才会执行{@link Listener }中方法的call

*

* @param sleep 毫秒

*/

public void setSleep(long sleep) {

this.sleep = sleep;

}

/**

* 携带参数

*

* @param value

*/

public void setValue(Object value) {

this.value = value;

}

/**

* 停止所有没睡醒的线程

*/

public void cancel() {

allowExcuteVersion();

stop();

}

// 真正处理逻辑

private void start(final Object obj) {

allowExcuteVersion();

stop();

curr = new Thread(new Runnable() {

public void run() {

if (sleep > 0) {

try {

Thread.sleep(sleep);

} catch (InterruptedException e) {

e.printStackTrace();

return;

}

}

Thread currentThread = Thread.currentThread();

boolean return1 = isReturn(currentThread);

if (return1) {

if (listenr != null) {

listenr.call(END, value);

}

return;

}

if (listenr != null) {

listenr.call(START, obj);

}

}

});

curr.setName(count + "");

curr.start();

}

// 最新线程的标记

private void allowExcuteVersion() {

count++;

}

// 停止当前的线程

private void stop() {

if (curr != null) {

try {

curr.stop();

} catch (Exception e) {

}

}

}

/**

* 是否调用线程的{@link Listener}中call

*

* @param thread

* @return

*/

private boolean isReturn(Thread thread) {

String name = thread.getName();

int curr = Integer.valueOf(name);

if (curr < count) {

return true;

}

return false;

}

}

最后

以上就是文静奇迹为你收集整理的c语言多次调用函数 只给出最后一次,一个方法连续调用多次,但方法体里面的代码只保证最后一次的执行,之前连续调用的方法体都不执行...的全部内容,希望文章能够帮你解决c语言多次调用函数 只给出最后一次,一个方法连续调用多次,但方法体里面的代码只保证最后一次的执行,之前连续调用的方法体都不执行...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部