有趣的程序:回文数.java

本文介绍了一个使用Java编写的简单程序,该程序能够检测用户输入的五位或更少位数的数字是否为回文数。通过逐位比较数字的最高位与最低位来判断其是否满足回文特性。

回文数

import java.util.*;

public class Number

{  

    public static void main(String args[])

    {

        int number=0,d5,d4,d3,d2,d1;

        Scanner reader=new Scanner(System.in);     

        System.out.println("从键盘输入一个199999之间的数");

        while(reader.hasNextInt())  

         {

           number=reader.nextInt();

           if(number>=1&&number<=99999)    // 判断number199999之间的条件

            {

                d5=number/10000 ;  // 计算number的最高位(万位)d5

                d4=number%10000/1000 ;  // 计算number的千位d4

                d3=number%1000/100  ; // 计算number的百位d3

                d2=number%100/10;

                d1=number%10;

              if(d5!=0)  // 判断number5位数的条件

                {

                  System.out.printf("\n%d5位数", number);

                  if (d5==d1&&d4==d2)  // 判断number是回文数的条件

                   {

                     System.out.printf("\t%d是回文数", number);

                   }

                  else 

                   { 

                     System.out.printf("\t%d不是回文数", number);

                   }

                }

              else if (d5==0&&d4!=0)   // 判断number4位数的条件

                {

                   System.out.printf("\n%d4位数",number);

                   if (d4==d1&&d2==d3)  // 判断number是回文数的条件码

                   {

                      System.out.printf("\t%d是回文数", number);

                   }

                  else

                   { 

                     System.out.printf("\t%d不是回文数",number);

                   }

                }

                else if (d5==0&&d4==0&&d3!=0)  // 判断number3位数的条件

                {

                   System.out.printf("\n%d3位数", number);

                   if (d3==d1)  // 判断number是回文数的条件

                   {

                      System.out.printf("\t%d是回文数", number);

                   }

                  else

                   { 

                     System.out.printf("\t%d不是回文数", number);

                   }

                }

             else if(d2!=0)

                {

                   System.out.printf("\n%d2位数", number);

                   if(d1==d2)

                   {

                      System.out.printf("\t%d是回文数", number);

                   }

                  else

                   { 

                     System.out.printf("\t%d不是回文数", number);

                   }

                }

             else if(d1!=0)

                {

                   System.out.printf("\n%d1位数", number);

                   System.out.printf("\t%d是回文数", number);

                }

            }

         else

            {

               System.out.printf("\n%d不在199999之间", number);

            }

         System.out.printf("%n可继续输入整数或输入非整数结束程序%n");

        }

      System.out.println("你输出的数据不是整数");

    }

}

 

 

ay14 03:39:46 Error MS2 WebLogicServer [STUCK] ExecuteThread: '141' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "619" seconds working on the request "Http Request Information: weblogic.servlet.internal.ServletRequestImpl@545919db[POST /lkmpmi/standardplateprocess/standardplate.jsf] ", which is more than the configured time (StuckThreadMaxTime) of "600" seconds in "server-failure-trigger". Stack trace: java.base@11.0.15.1/java.lang.Object.wait(Native Method) weblogic.transaction.internal.XAResourceDescriptor.startResourceUse(XAResourceDescriptor.java:744) weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1394) weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1327) weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:298) weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:686) weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:505) weblogic.jdbc.jts.Driver.createLocalConnection(Driver.java:362) weblogic.jdbc.jts.Driver.connect(Driver.java:175) weblogic.jdbc.common.internal.WLDataSourceImpl.getConnectionInternal(WLDataSourceImpl.java:655) weblogic.jdbc.common.internal.WLDataSourceImpl.getConnection(WLDataSourceImpl.java:611) weblogic.jdbc.common.internal.WLDataSourceImpl.getConnection(WLDataSourceImpl.java:604) weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:108) org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138) org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:172) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:348) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:316) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:583) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1665) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:323) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:622) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:567) org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2099) org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:603) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:275) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:261) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:764) org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2822) org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2775) org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:561) org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1232) org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911) org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1191) org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:447) org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1279) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2983) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1898) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1880) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1830) org.eclipse.persistence.internal.jpa.EntityManagerImpl.executeQuery(EntityManagerImpl.java:1012) org.eclipse.persistence.internal.jpa.EntityManagerImpl.findInternal(EntityManagerImpl.java:954) org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:830) org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:696) jdk.internal.reflect.GeneratedMethodAccessor766.invoke(Unknown Source) java.base@11.0.15.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base@11.0.15.1/java.lang.reflect.Method.invoke(Method.java:566) weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:97) weblogic.persistence.TransactionalEntityManagerProxyImpl.invoke(TransactionalEntityManagerProxyImpl.java:164) weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:86) com.sun.proxy.$Proxy1325.find(Unknown Source) com.lkm.ejb.ncoperation.local.NcOperationDbEjb.getDetailEntity2(NcOperationDbEjb.java:996) com.lkm.ejb.ncoperation.local.NcOperationDbEjb.getDetailEntity(NcOperationDbEjb.java:1002) com.lkm.ejb.ncoperation.local.NcOperationDbEjb.getDetail(NcOperationDbEjb.java:1010) jdk.internal.reflect.GeneratedMethodAccessor3991.invoke(Unknown Source) java.base@11.0.15.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base@11.0.15.1/java.lang.reflect.Method.invoke(Method.java:566) com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed(MethodInvocationInvocationContext.java:101) com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(JeeInterceptorInterceptor.java:101) com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed(MethodInvocationInvocationContext.java:101) org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:72) org.jboss.weld.module.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) jdk.internal.reflect.GeneratedMethodAccessor325.invoke(Unknown Source) java.base@11.0.15.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base@11.0.15.1/java.lang.reflect.Method.invoke(Method.java:566) com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(JeeInterceptorInterceptor.java:94) com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) com.sun.proxy.$Proxy1332.getDetail(Unknown Source) 什么意思
06-10
<think>首先,理解用户的问题。用户希望了解WebLogic服务器中线程卡住的具体原因以及如何解决,特别是提到的“stuck”ExecuteThreaderror,withHttpServletRequestImplandXAResourceDescriptor。用户参考了几个引用,但我必须基于这些引用来回答,并参考上一次的问题和回答。但我没有上一次交互的上下文,因为这是独立的查询。所以,我应该直接针对这个问题作答。关键点从引用中提取:-引用[1]:描述了线程处于WAITING状态,等待请求。这种状态表示空闲线程在等待新任务。-引用[2]:指出问题是由于处理请求超时引起的;配置时间是600s,但线程处理了626s后未能释放请求,导致错误。这可能导致线程阻塞或weblogic挂起。-引用[3]:解释卡住的线程:当线程卡住时,服务器会检测并记录消息。如果所有线程都卡住,服务器健康状态变为“warning”或“critical”。卡住线程可能由于各种原因,但通常是性能问题,最终会导致服务器崩溃。用户具体提到“stuck”ExecuteThreaderror,withHttpServletRequestImplandXAResourceDescriptor,这暗示涉及HTTP请求和XA资源描述符,后者可能与数据库事务或JTA事务相关,因为在WebLogic中,XA资源用于分布式事务。所以,线程卡住的原因可能包括:-请求处理超时:如引用[2]所述,请求处理时间超过了配置的阻塞时间(默认为600秒)。-资源死锁:涉及数据库事务时,可能发生死锁或资源争用。-代码问题:如长运行操作、无限循环、或对外部系统的阻塞调用。-网络或外部服务问题:等待远程服务响应导致的卡顿。如何解决:-从引用[2]和[3]:-检查并调整线程阻塞超时时间。在WebLogic中,可以通过管理控制台配置执行队列的阻塞时间(默认为600秒)。-监控线程转储:使用工具如jstack或WebLogic的ThreadDump功能来分析线程状态,找出卡住的线程。-优化应用程序:减少长运行操作,确保资源如数据库连接及时释放。-调整JVM参数:避免资源耗尽。-对于涉及XA事务的,检查分布式事务管理,确保事务正确回滚或提交。在回答中,结构需要清晰:-解释线程卡住的原因。-描述常见场景(如HTTP请求和XA资源)。-提供解决步骤。-基于系统级指令:使用$...$或$$...$$表示数学公式(如果有),但此问题可能不涉及数学,所以可能无需使用。如果提到时间或配置参数,可以用$...$表示数字。-使用中文回答。-生成相关问题。-引用的段落末尾添加引用标识。回答结构:1.介绍线程卡住的概念。2.具体原因分析。3.解决方案步骤。4.预防措施。5.相关问题。生成相关问题:-如“如何配置WebLogic线程超时时间?”,“如何处理分布式事务中的卡住线程?”。最后,添加引用标识。例如,[^1],[^2],[^3]。内容规划:-原因:-超时:请求处理超过阻塞时间。-资源争用:如数据库锁。-代码错误:如死循环。-特定于HttpServletRequestImpl和XAResourceDescriptor:可能与Web服务或事务相关。-解决:-检查线程转储。-配置超时。-优化应用。-监控事务。确保回答基于引用。</think> ### WebLogic Server 中线程卡住的原因及解决方法 WebLogic Server 中出现 "STUCK" ExecuteThread 错误时,表明有线程在指定时间内未完成任务,导致服务器无法处理新请求,严重影响性能和稳定性[^3]。具体到您的例子,涉及 `Http ServletRequestImpl`(HTTP请求处理)和 `XAResourceDescriptor`(分布式事务资源描述符),这说明卡住可能与Web服务事务或数据库事务相关。以下是基于引用资料的分析和解决方案。 --- #### **线程卡住的具体原因** 线程卡住(Stuck Thread)的根本原因是线程在执行任务时未能在预定时间内完成或释放资源,引发系统超时。具体原因包括: 1. **请求处理超时**: WebLogic配置了一个默认的线程阻塞时间(通常为$600$秒)。如果线程处理HTTP请求(如通过`Http ServletRequestImpl`)的时间超过此阈值(例如$626$秒),服务器会将该线程标记为卡住[^2]。常见场景包括: - 数据库事务处理(`XAResourceDescriptor`涉及):如果分布式事务未及时提交或回滚(如数据库死锁、事务超时),线程会被阻塞在资源等待上。 - 外部服务调用:HTTP请求依赖远程服务(如RESTful API),但服务响应超时或无限循环。 - 资源争用:线程持有锁(如内存监控器)过久,引用[1]中`locked <0x000000073eeb0338>`表示线程被锁住。 2. **性能瓶颈或代码缺陷**: - 应用程序中可能存在长运行操作(如复杂计算或无限递归),导致`ExecuteThread`无法释放。 - 资源耗尽:如数据库连接池满、JVM内存不足,线程卡在等待资源状态(WAITING 或 BLOCKED)[^1][^3]。 3. **系统配置问题**: - 未优化的WebLogic参数(如执行队列大小或阻塞时间),默认配置$600$秒不足以处理某些高延迟事务[^2]。 4. **连锁效应**: 卡住的线程数持续增加,可能使整个执行队列挂起(所有线程卡住),导致服务器健康状态降至“critical”(严重)或“warning”(警告),最终引发服务器崩溃[^3]。 --- #### **解决线程卡住的方法** 解决卡住线程需结合监控、配置调整和代码优化。以下是具体步骤: 1. **分析线程转储(Thread Dump)**: - **工具使用**:通过WebLogic管理控制台生成线程转储,或使用命令如`jstack`。 - **查看卡住线程**:查找状态为`WAITING`或`BLOCKED`的线程(如引用[1]所示)。关注堆栈跟踪中`weblogic.work.ExecuteThread.waitForRequest`或`XAResourceDescriptor`相关调用。 - **识别根源**: - 如果涉及`Http ServletRequestImpl`,检查HTTP请求处理代码是否有长运行逻辑。 - 如果涉及`XAResourceDescriptor`,分析事务管理是否有超时未提交的事务(如使用JDBC调试)。 2. **调整WebLogic配置**: - **增加阻塞时间**:在管理控制台修改执行队列的 `Stuck Thread Timer` 值(从默认$600$秒增加到更合适的值,如$1200$秒)。命令示例(在config.xml中修改): ```xml <execute-queue name="weblogic.kernel.Default"> <stuck-thread-timeout-seconds>1200</stuck-thread-timeout-seconds> </execute-queue> ``` [^2] - **优化执行队列**:调整线程池大小,避免资源竞争。例如,增加 `Maximum Threads Constraint`。 3. **优化应用程序和事务**: - **超时控制**:在事务代码中设置超时机制(如设置`@TransactionTimeout`),确保分布式事务在固定时间内回滚[^3]。 - **异步处理**:将长运行操作(如文件上传或复杂查询)从同步HTTP请求拆分为异步任务。 - **资源管理**:及时关闭数据库连接和XA资源,避免内存泄漏。 4. **监控与预防**: - **实时监控**:使用WebLogic诊断模块或第三方工具(如Prometheus)监控线程状态。 - **自动恢复**:配置Node Manager自动重启处于“critical”状态的服务器[^3]。 - **JVM调优**:增加堆大小(`-Xmx`参数)或垃圾回收器优化,防止资源耗尽。 通过以上步骤,可快速缓解卡住线程问题,提升系统健壮性[^2][^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值