首页编程java编程java方法什么时候失效?...方法的定时任务吗使用Java自己的定时操作是失效的

java方法什么时候失效?...方法的定时任务吗使用Java自己的定时操作是失效的

编程之家2023-10-12103次浏览

各位老铁们,大家好,今天由我来为大家分享java方法什么时候失效,以及...方法的定时任务吗使用Java自己的定时操作是失效的的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

java方法什么时候失效?...方法的定时任务吗使用Java自己的定时操作是失效的

...方法的定时任务吗使用Java自己的定时操作是失效的

是的,Flink中可以使用定时器(Timer)来实现每n秒执行一个方法的定时任务。Flink的定时器分为两种类型:EventTime Timer和ProcessingTime Timer。

其中,EventTime Timer是基于事件时间的定时器,可以使用在基于事件时间处理的Flink应用中,而ProcessingTime Timer是基于处理时间的定时器,可以使用在基于处理时间处理的Flink应用中。根据需求选择对应的定时器类型即可。

下面是一个使用ProcessingTime Timer实现每n秒执行一个方法的示例代码:

java方法什么时候失效?...方法的定时任务吗使用Java自己的定时操作是失效的

import org.apache.flink.api.common.functions.MapFunction;

import org.apache.flink.api.common.state.ValueState;

import org.apache.flink.api.common.state.ValueStateDescriptor;

java方法什么时候失效?...方法的定时任务吗使用Java自己的定时操作是失效的

import org.apache.flink.configuration.Configuration;

import org.apache.flink.streaming.api.functions.KeyedProcessFunction;

import org.apache.flink.streaming.api.TimeCharacteristic;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import org.apache.flink.util.Collector;

public class Main{

public static void main(String[] args) throws Exception{

StreamExecutionEnvironment env= StreamExecutionEnvironment.getExecutionEnvironment();

env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

env.socketTextStream("localhost", 9999)

.keyBy(0)

.process(new MyKeyedProcessFunction())

.print();

env.execute("ProcessingTime Timer Demo");

}

public static class MyKeyedProcessFunction extends KeyedProcessFunction<String, String, String>{

private transient ValueState<Long> lastTriggerTimeState;

@Override

public void open(Configuration parameters) throws Exception{

super.open(parameters);

ValueStateDescriptor<Long> lastTriggerTimeDescriptor= new ValueStateDescriptor<>("lastTriggerTime", Long.class);

lastTriggerTimeState= getRuntimeContext().getState(lastTriggerTimeDescriptor);

}

@Override

public void processElement(String value, Context ctx, Collector<String> out) throws Exception{

//每n秒触发一次定时器

long currentTime= ctx.timerService().currentProcessingTime();

long lastTriggerTime= lastTriggerTimeState.value()== null? 0: lastTriggerTimeState.value();

long interval= 5000;//每5秒执行一次

if(currentTime- lastTriggerTime>= interval){

lastTriggerTimeState.update(currentTime);

out.collect("执行定时任务");

}

}

}

}

在上述代码中,我们定义了一个KeyedProcessFunction,并在其中使用了ProcessingTime Timer来实现每5秒执行一次定时任务。每次处理元素时,首先获取当前时间,然后与上次触发定时器的时间进行比较,如果时间间隔超过了设定的值,则执行定时任务,并更新上次触发定时器的时间。

需要注意的是,由于Flink是流式计算框架,定时器是基于时间的,因此需要使用TimeCharacteristic.ProcessingTime来指定使用ProcessingTime来计算定时器触发时间。另外,在使用定时器时需要考虑并发问题,例如使用ValueState来存储上次触发定时器的时间。

java实现生失效日期的划分

publicclassTest{

publicstaticvoidmain(String[]args){

//生效时间,这里为了方便取现在系统的时间

DateableTime=newDate();

//失效时间

DatedisableTime=null;

//用Calendar类进行日期的计算

Calendarc=Calendar.getInstance();

SimpleDateFormatsf=newSimpleDateFormat("yyyy-MM-dd");

for(inti=0;i<6;i++){

//设置生效时间

c.setTime(ableTime);

//计算失效时间,根据你的计算方法,这里假设一个月后为失效时间

c.add(Calendar.MONTH,1);

//赋值给失效时间

disableTime=c.getTime();

System.out.println("生效时间:"+sf.format(ableTime)+",失效时间:"+sf.format(disableTime));

//把失效时间+1天赋值给生效时间,作为下次循环的生效时间

c.add(Calendar.DATE,1);

ableTime=c.getTime();

}

}

}

是不是要这样的效果

java中synchronized失效的问题

首先,我没看到你说的结果,把你运行的结果贴出来看看?

代码块同步时同步的字节码,4个线程都会访问这个方法,只不过第一个抢到资源的先调用这个方法并加锁,当锁释放后下一个线程才能开始这个方法。

你所说的这个情况应该每次测试的时候是不同的线程抢到了锁,并没有4个同时执行。所以是线程安全

当你在RUN方法设置同步的时候。自然是最先实例化的线程Start()方法拿到方法级的锁咯。

另外

try{

Thread.sleep(1);

} catch(Exception e){

e.getMessage();

}

这段代码没什么意义吧。

java Thread yield()方法为什么失效

我是来学习的,我觉得楼上说的基本是对的。

你的程序我拿去跑了几次,结果都和预期的一样,10个10个的输出。

刚才查了一下资料,上面说了yield()出来的执行顺序很多是不确定的,特别是在程序本身有地方需要占用大量系统时间的情况下。

要准确控制线程执行的顺序,最好不要使用yield();可以用sleep()来控制,也可以用wait()+notify()来控制,但是也不会非常精确

OK,本文到此结束,希望对大家有所帮助。

java学完框架后学什么?学完javaSE之后学什么手机mp4格式转换器 手机mp4转mkv格式转换器