GVKun编程网logo

在 Java 中处理 InterruptedException(java.io.interruptedioexception)

28

最近很多小伙伴都在问在Java中处理InterruptedException和java.io.interruptedioexception这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给

最近很多小伙伴都在问在 Java 中处理 InterruptedExceptionjava.io.interruptedioexception这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展C3P0:java.lang.InterruptedException: sleep interrupted、Connection; nested exception is java.sql.SQLException: interrupt,这是什么问题啊?、HDFS 上传文件报错 java.lang.InterruptedException、InterruptedException: sleep interrupted at java.lang.Thread.sleep等相关知识,下面开始了哦!

本文目录一览:

在 Java 中处理 InterruptedException(java.io.interruptedioexception)

在 Java 中处理 InterruptedException(java.io.interruptedioexception)

以下处理方式有什么区别InterruptedException?最好的方法是什么?

try{ //...} catch(InterruptedException e) {    Thread.currentThread().interrupt(); }

要么

try{ //...} catch(InterruptedException e) {   throw new RuntimeException(e);}

编辑:我还想知道这两个在哪些场景中使用。

答案1

小编典典

以下处理InterruptedException的方式有什么区别?最好的方法是什么?

你可能会问这个问题,因为你调用了一个 throws 的方法InterruptedException

首先,您应该throwsInterruptedException了解它是什么:方法签名的一部分以及调用您正在调用的方法的可能结果。因此,首先要接受这样一个事实,即
anInterruptedException是方法调用的完全有效的结果。

现在,如果你调用的方法抛出了这样的异常, 你的 方法应该怎么做?您可以通过思考以下问题来找出答案:

正在实施的方法抛出一个 是否有意义InterruptedException换句话说,InterruptedException调用
你的 方法是一个明智的结果吗?

  • 如果 ,那么throws InterruptedException应该是 您的 方法签名的一部分,并且您应该让异常传播(即根本不捕获它)。

示例
:您的方法等待来自网络的值以完成计算并返回结果。如果阻塞网络调用抛出一个InterruptedException你的方法不能以正常方式完成计算。你让InterruptedException传播。

>     int computeSum(Server server) throws InterruptedException {    // Any InterruptedException thrown below is propagated    int a = server.getValueA();    int b = server.getValueB();    return a + b;}
  • 如果 no ,那么你不应该声明你的方法,throws InterruptedException你应该(必须!)捕获异常。现在,在这种情况下要记住两件事很重要:

    1. 有人打断了你的话题。有人可能急于取消操作,优雅地终止程序,或其他任何事情。你应该对那个人有礼貌,然后毫不犹豫地从你的方法中返回。

    2. 即使 您的InterruptedException方法可以设法在线程已被中断的情况下产生合理的返回值,这仍然很重要。特别是,调用您的方法的代码可能对您的方法执行期间是否发生中断感兴趣。因此,您应该通过设置中断标志来记录发生中断的事实:Thread.currentThread().interrupt()

示例 :用户要求打印两个值的总和。Failed to compute sum如果无法计算总和,则打印 ” ” 是可以接受的(并且比让程序因
的堆栈跟踪而崩溃要好得多InterruptedException)。换句话说,用 .声明这个方法是 没有throwsInterruptedException意义的。

>     void printSum(Server server) {     try {         int sum = computeSum(server);         System.out.println("Sum: " + sum);     } catch (InterruptedException e) {         Thread.currentThread().interrupt();  // set interrupt flag         System.out.println("Failed to compute sum");     }}

现在应该很清楚,只是做throw newRuntimeException(e)是一个坏主意。这对来电者不太礼貌。您可以发明一个新的运行时异常,但根本原因(有人希望线程停止执行)可能会丢失。

其他示例:

实施Runnable:您可能已经发现,
的签名Runnable.run不允许重新抛出InterruptedExceptions。好吧, 签了执行Runnable,这意味着

签了处理可能InterruptedExceptions。要么选择不同的界面,例如Callable,要么遵循上面的第二种方法。

调用Thread.sleep:您正在尝试读取文件,并且规范说您应该尝试 10 次,中间间隔 1
秒。你打电话Thread.sleep(1000)。所以,你需要处理InterruptedException. 对于诸如
“如果我被打断,我将无法完成尝试读取文件的操作”tryToReadFile这样的方法非常有意义。换句话说, throw 方法非常有意义。
__InterruptedExceptions

String tryToReadFile(File f) throws InterruptedException {    for (int i = 0; i < 10; i++) {        if (f.exists())            return readFile(f);        Thread.sleep(1000);    }    return null;}

C3P0:java.lang.InterruptedException: sleep interrupted

C3P0:java.lang.InterruptedException: sleep interrupted

好好的就报异常了~~

警告: com.mchange.v2.resourcepool.BasicResourcePool@8fce95 -- Thread unexpectedly interrupted while performing an acquisition attempt.
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
	at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

Connection; nested exception is java.sql.SQLException: interrupt,这是什么问题啊?

Connection; nested exception is java.sql.SQLException: interrupt,这是什么问题啊?

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
    at com.sun.proxy.$Proxy100.insert(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
    at com.sun.proxy.$Proxy108.insert(Unknown Source)
    at com.hacker.resaleclient.service.impl.OrderslocalServiceImpl.uploadOrders(OrderslocalServiceImpl.java:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:116)
    at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.executeWithArgs(MethodExecutionAction.java:93)
    at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:78)
    at com.netflix.hystrix.contrib.javanica.command.GenericCommand$1.execute(GenericCommand.java:48)
    at com.netflix.hystrix.contrib.javanica.command.AbstractHystrixCommand.process(AbstractHystrixCommand.java:145)
    at com.netflix.hystrix.contrib.javanica.command.GenericCommand.run(GenericCommand.java:45)
    at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
    at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
    at rx.Observable.unsafeSubscribe(Observable.java:10151)
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
    at rx.Observable.unsafeSubscribe(Observable.java:10151)
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
    at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
    at rx.Observable.unsafeSubscribe(Observable.java:10151)
    at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56)
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47)
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69)
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
    ... 45 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:82)
    at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:68)
    at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:338)
    at org.apache.ibatis.executor.ReuseExecutor.prepareStatement(ReuseExecutor.java:88)
    at org.apache.ibatis.executor.ReuseExecutor.doUpdate(ReuseExecutor.java:51)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
    ... 51 more
Caused by: java.sql.SQLException: interrupt
    at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1405)
    at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1248)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4619)
    at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:680)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4615)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1226)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1218)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:90)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    ... 59 more
Caused by: java.lang.InterruptedException
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
    at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
    at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1402)
    ... 68 more

HDFS 上传文件报错 java.lang.InterruptedException

HDFS 上传文件报错 java.lang.InterruptedException

使用 hdfs 上传文件时报错,

java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at java.lang.Thread.join(Thread.java:1252)
	at java.lang.Thread.join(Thread.java:1326)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:969)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:707)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:896)

原来是 input 目录没有按照官网:
$ .bin/hdfs dfs -mkdir /user
$ .bin/hdfs dfs -mkdir /user/
于是重新创建目录:
$ .bin/hdfs dfs -mkdir -p /user/input
$ .bin/hdfs dfs -put etc/hadoop /user/input

InterruptedException: sleep interrupted     at java.lang.Thread.sleep

InterruptedException: sleep interrupted at java.lang.Thread.sleep

 scheduler.JobScheduler: Added jobs for time 1591076608000 ms
20/06/02 13:43:28 ERROR logging.DriverLogger$DfsAsyncWriter: Failed writing driver logs to dfs
java.io.InterruptedIOException: Retry interrupted
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.processWaitTimeAndRetryInfo(RetryInvocationHandler.java:136)
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:107)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359)
    at com.sun.proxy.$Proxy13.getAdditionalDatanode(Unknown Source)
    at org.apache.hadoop.hdfs.DataStreamer.addDatanode2ExistingPipeline(DataStreamer.java:1362)
    at org.apache.hadoop.hdfs.DataStreamer.handleDatanodeReplacement(DataStreamer.java:1598)
    at org.apache.hadoop.hdfs.DataStreamer.setupPipelineInternal(DataStreamer.java:1499)
    at org.apache.hadoop.hdfs.DataStreamer.setupPipelineForAppendOrRecovery(DataStreamer.java:1481)
    at org.apache.hadoop.hdfs.DataStreamer.processDatanodeOrExternalError(DataStreamer.java:1256)
    at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:667)
Caused by: java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.processWaitTimeAndRetryInfo(RetryInvocationHandler.java:130)
    ... 9 more
 

今天关于在 Java 中处理 InterruptedExceptionjava.io.interruptedioexception的分享就到这里,希望大家有所收获,若想了解更多关于C3P0:java.lang.InterruptedException: sleep interrupted、Connection; nested exception is java.sql.SQLException: interrupt,这是什么问题啊?、HDFS 上传文件报错 java.lang.InterruptedException、InterruptedException: sleep interrupted at java.lang.Thread.sleep等相关知识,可以在本站进行查询。

本文标签: