解决java启动时报线程占用报错:Exception in thread “Thread-14“ java.net.BindException: Address already in use: bind

目录
  • 前言
  • 1 异常
  • 2 问题定位
    • 2.1 第一种情况
    • 2.2 第二种情况
    • 2.3 第三种情况
  • 3 问题原因
  • 4 思考学习
  • 总结

前言

本文提供三种不同的解决方式,也是三种不同的情况和思路

我的问题是在springboot整合了xxl-job一段时间后出现的。如果你程序里集成了xxl-job或者有需要配置其它端口的地方,这篇文章或许可以给你带来启发或者解决你的问题。

1 异常

启动项目后抛出异常,但是奇怪的是执行器在任务调度中心中注册成功,也能成功执行

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

2023-02-14 11:22:15.516  INFO 4436 --- [           main] com.jxj.SafetyWebserverApplication       : Starting SafetyWebserverApplication on abc with PID 4436 (C:\project\safetyproduction_collectdata\target\classes started by whx in C:\project\safetyproduction_collectdata)
2023-02-14 11:22:15.521  INFO 4436 --- [           main] com.jxj.SafetyWebserverApplication       : No active profile set, falling back to default profiles: default
2023-02-14 11:22:16.722  INFO 4436 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
....

2023-02-14 11:22:19.191  INFO 4436 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2023-02-14 11:22:19.394  INFO 4436 --- [           main] com.jxj.config.XxlJobConfig              : >>>>>>>>>>> xxl-job config init.
2023-02-14 11:22:19.666  INFO 4436 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2023-02-14 11:22:20.271  INFO 4436 --- [           main] c.xxl.job.core.executor.XxlJobExecutor   : >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@c6bf8d9[class com.jxj.task.WarningTask#demoJobHandler]
2023-02-14 11:22:20.585  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2023-02-14 11:22:20.586  INFO 4436 --- [           main] o.s.i.channel.PublishSubscribeChannel    : Channel 'application.errorChannel' has 1 subscriber(s).
2023-02-14 11:22:20.586  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started bean '_org.springframework.integration.errorLogger'
2023-02-14 11:22:20.586  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {message-handler:mqttPublisherConfig.mqttOutbound.serviceActivator} as a subscriber to the 'mqttOutboundChannel' channel
2023-02-14 11:22:20.586  INFO 4436 --- [           main] o.s.integration.channel.DirectChannel    : Channel 'application.mqttOutboundChannel' has 1 subscriber(s).
2023-02-14 11:22:20.600  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started bean 'mqttPublisherConfig.mqttOutbound.serviceActivator'
2023-02-14 11:22:20.600  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {message-handler:mqttSenderConfig.mqttOutbound.serviceActivator} as a subscriber to the 'mqttOutboundChannel1' channel
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.integration.channel.DirectChannel    : Channel 'application.mqttOutboundChannel1' has 1 subscriber(s).
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started bean 'mqttSenderConfig.mqttOutbound.serviceActivator'
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {message-handler:mqttSubscriberConfig.handler.serviceActivator} as a subscriber to the 'mqttInboundChannel' channel
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.integration.channel.DirectChannel    : Channel 'application.mqttInboundChannel' has 1 subscriber(s).
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started bean 'mqttSubscriberConfig.handler.serviceActivator'
2023-02-14 11:22:20.601  INFO 4436 --- [           main] ProxyFactoryBean$MethodInvocationGateway : started bean 'mqttGateway'
2023-02-14 11:22:20.601  INFO 4436 --- [           main] ProxyFactoryBean$MethodInvocationGateway : started bean 'mqttGateway'
2023-02-14 11:22:20.601  INFO 4436 --- [           main] ProxyFactoryBean$MethodInvocationGateway : started bean 'mqttGateway'
2023-02-14 11:22:20.601  INFO 4436 --- [           main] o.s.i.gateway.GatewayProxyFactoryBean    : started bean 'mqttGateway'
Exception in thread "Thread-17" java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:134)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1346)
	at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
	at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
	at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:985)
	at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
	at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:344)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518)
	at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)
2023-02-14 11:22:21.444  INFO 4436 --- [           main] .m.i.MqttPahoMessageDrivenChannelAdapter : started bean 'inbound'; defined in: 'class path resource [com/jxj/config/MqttSubscriberConfig.class]'; from source: 'org.springframework.core.type.classreading.SimpleMethodMetadata@1d4664d7'
2023-02-14 11:22:21.446  INFO 4436 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]
2023-02-14 11:22:25.537  INFO 4436 --- [           main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: java.net.ConnectException: Connection refused: connect
2023-02-14 11:22:25.545  INFO 4436 --- [ntContainer#0-1] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]

2 问题定位

2.1 第一种情况

网上有的说通过

在低版本的 xxl-job 中, 初始化XxlJobSpringExecutor执行器需要在@Bean中加上 initMethod = "start", destroyMethod = "destroy",但是在高版本的 xxl-job(如 2.1.2)则需要删除 initMethod = "start", destroyMethod = "destroy"

而我的问题不是在bean上加(initMethod = “start”, destroyMethod = “destroy”),我加上之后会报两遍线程被使用的异常。

Exception in thread "Thread-14" java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:134)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1346)
	at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
	at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
	at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:985)
	at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
	at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:344)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518)
	at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)
2023-02-14 11:25:20.568  INFO 18140 --- [           main] c.xxl.job.core.executor.XxlJobExecutor   : >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1618c98a[class com.jxj.task.WarningTask#demoJobHandler]
Exception in thread "Thread-20" java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:134)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1346)
	at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
	at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
	at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:985)
	at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
	at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:344)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518)
	at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)
//原注解:
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
	...
	}

//修改后注解
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
	...
	}

2.2 第二种情况

后来我发现我的问题是 本地和线上的程序连接了相同的xxl-job,并且连接xxl-job的端口是一样的,导致了这个问题!

xxl:
  job:
    accessToken: xxx
    admin:
#       addresses: http://1xxxxx/xxl-job-admin
      addresses: http://39xxxxx/xxl-job-admin
    executor:
      address: 'xxx'
      appname: safexxxxxst #这个名字要和页面配置的一致
      ip: ''
      logpath: /datxxxxjob/joxxxler
      logretentiondays: 30
      port: 9996

就是这个 port端口重复导致的问题修改一下即可

port: 9996

2.3 第三种情况

本来我是第二种情况已经解决了,结果下午又报这个错了,因此有了第三种情况的解决。

启动报错时的 错误关键日志:

2023-02-14 13:59:12.074  INFO 8364 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory#131ba005:0/SimpleConnection@5981f2c6 [delegate=amqp://root@127.0.0.1:5673/, localPort= 5415]
Exception in thread "Thread-21" java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:134)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1346)
	at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
	at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
	at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:985)
	at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
	at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:344)
	at 

由于我已经解决过一次,所以我对端口比较敏感(大家看完后面的分析就可以知道我为什么敏感),就在yaml文件种搜了一下所有的 port 一共有五处。

排除项目的port(项目的接口冲突会直接报错,停止运行

排除xxl-job (第二种情况冲突已经解决

剩下的是集成的 redis,elasticsearch,rabbitmq

redis和elasticsearch我都没有开启,问题就只在rabbitmq了。

rabbitmq我是本地起的docker,来连接测试的。

然后我有认真看了一下日志,就是上面贴出来的第一行

[delegate=amqp://root@127.0.0.1:5673/, localPort= 5415]

也就是打印完这个日志后报的错误,localPort= 5415,于是我又在本地查看了一下这个5415端口使用情况

netstat -aon|findstr 5415

果然 两个不同的线程在用!

C:\Uxxxs\1xx0>netstat -aon|findstr 5415
  TCP    127.0.0.1:5415         127.0.0.1:5673         ESTABLISHED     8364
  TCP    127.0.0.1:5673         127.0.0.1:5415         ESTABLISHED     4136

然后我打开任务管理器 详细信息,找到4136是daocker

我重启了一下电脑,,解决了

3 问题原因

程序启动之后重新启动了一个线程去连接xxl-job的端口,但是这个端口已经被占用了,所以程序就直接返回了一个这个线程被占用了。

4 思考学习

服务创建监听的时候,如果端口有LISTENING、ESTABLISHED、TIME_WAIT等,好像都会报错。 可以研究下原理

TCP状态转移要点

TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。

1、LISTENING状态

  FTP服务启动后首先处于侦听(LISTENING)状态。

2、ESTABLISHED状态

  ESTABLISHED的意思是建立连接。表示两台机器正在通信。

3、TIME_WAIT

我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。

总结

到此这篇关于解决java启动时报线程占用:Exception in thread “Thread-14“ java.net.BindException: Address already in use: bind的文章就介绍到这了,更多相关java启动时报线程占用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java多线程导致CPU占用100%解决及线程池正确关闭方式

    简介 情景:1000万表数据导入内存数据库,按分页大小10000查询,多线程,15条线程跑. 使用了ExecutorService executor = Executors.newFixedThreadPool(15) 本地跑了一段时间后,发现电脑CPU逐渐升高,最后CPU占用100%卡死,内存使用也高达80%. 排查问题 Debug 发现虽然创建了定长15的线程池,但是因为数据量大,在For中循环分页查询的List会持续加入LinkedBlockingQueue() 队列中每一个等待的任务,又

  • 如何定位java程序中占用cpu最高的线程堆栈信息

    找出占用cpu最高的线程堆栈信息 在java编码中,有时会因为粗心导致cpu占用较高的情况,为了避免影响程序的正常运行,需要找到问题并解决.这里模拟一个cpu占用较高的场景,并尝试定位到代码行. 示例代码如下: public class Math { public static final int initData = 666; public static User user = new User(); public int compute() { //一个方法对应一块栈帧内存区域 int a

  • 在windows下揪出java程序占用cpu很高的线程并完美解决

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾上

  • 解决java启动时报线程占用报错:Exception in thread “Thread-14“ java.net.BindException: Address already in use: bind

    目录 前言 1 异常 2 问题定位 2.1 第一种情况 2.2 第二种情况 2.3 第三种情况 3 问题原因 4 思考学习 总结 前言 本文提供三种不同的解决方式,也是三种不同的情况和思路 我的问题是在springboot整合了xxl-job一段时间后出现的.如果你程序里集成了xxl-job或者有需要配置其它端口的地方,这篇文章或许可以给你带来启发或者解决你的问题. 1 异常 启动项目后抛出异常,但是奇怪的是执行器在任务调度中心中注册成功,也能成功执行 . ____ _ __ _ _ /\\ /

  • 解决eclipse启动时报错Failed to create the Java Virtural Machine.问题的方法

    最近在学习android的开发搭建环境时,在网上下载了一个最新的eclpse,在启动的时候报错:Failed to create the Java Virtural Machine. 翻译一下,其意思就是说打开eclipse的失败原因是创建java虚拟机失败! 一般在启动的时候,出错,基本上除了虚拟机出错,就是jdk配置出错. 问题截图: 看原来的配置文件eclipse.ini的内容: 看最后一行"-XX:MaxPermSize=512M"改为256即可. 在看看找不到jdk启动报错的

  • Java 正确终止线程的方法

    Thread类中有一个已经废弃的 stop() 方法,它可以终止线程,但由于它不管三七二十一,直接终止线程,所以被废弃了.比如,当线程被停止后还需要进行一些善后操作(如,关闭外部资源),使用这个方法就无能为力了.可以通过线程中断来实现线程终止. 首先来看一下Java线程中断的一些内容: Java平台为每个线程维护了一个布尔型的中断标记,可以通过下列方法获取该标记的值: interrupt() 中断某个线程             isInterrupted() 返回该线程的中断标记       

  • Java中保证线程顺序执行的操作代码

    只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程可以看成是相对于的主线程的一个异步操作. public class FIFOThreadExample { public synchronized static void foo(String name) { System.out.print(name); } public static void

  • Java中关于线程安全的三种解决方式

    三个窗口卖票的例子解决线程安全问题 问题:买票过程中,出现了重票.错票-->出现了线程的安全问题 问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票 如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来,知道线程a操作完ticket时,其他线程才可以开始操作ticket,这种情况即使线程a出现了阻塞,也不能被改变 在Java中,我们通过同步机制,来解决线程的安全问题.(线程安全问题的前提:有共享数据) 方式一:同步代码块 synchroniz

  • 解决import包时报 Java 程序包不存在的问题

    目录 1. 执行Maven ->reload project 2. 执行 Invalidate and Restart 3. 统一编码 4. 重新编译 5. 设置idea自动加载jar包 6.删除本地的私有仓库后,再更新maven,重新加载 网上有很多解决方式,我想到的都汇总起来了,方便以后查看,你可能采用其中一种就能解决问题,我是用了最后一种才解决. 如果你要导入的包在Libraries下都本身一直没有存在,你这时就得看看pom里对应的依赖写的有没有问题,名字版本什么的在使用的仓库中有没有对应

  • Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决

    目录 1.项目启动时报错如下 2.原因分析 3.测试@ConditionalOnMissingBean注解 1.项目启动时报错如下 Description: The bean 'securityManager', defined in class path resource [org/apache/shiro/spring/config/web/autoconfigure/ShiroWebAutoConfiguration.class], could not be registered. A b

  • 完美解决Java中的线程安全问题

    给出一个问题,如下: 解决方案如下: public class Demo_5 { public static void main(String[] args) { //创建一个窗口 TicketWindow tw1=new TicketWindow(); //使用三个线程同时启动 Thread t1=new Thread(tw1); Thread t2=new Thread(tw1); Thread t3=new Thread(tw1); t1.start(); t2.start(); t3.s

  • 解决maven启动Spring项目报错的问题

    第一个问题 java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer 出现原因主要是 javax.servlet-api 在运行时将spring容器当成了servlet容器出现类型转换错误. 解决方法: 在pom.xml文件中修改 javax.servlet-a

  • java连接HBase,连接不上报错can not resolve问题及解决

    目录 java连接HBase,连接不上报错can not resolve java连接Hbase异常 问题原因 解决办法 java连接HBase,连接不上报错can not resolve [INFO] [2020-06-23 21:30:16][org.apache.hadoop.hbase.client.RpcRetryingCaller - 165]Call exception, tries=10, retries=35, started=47508 ms ago, cancelled=f

随机推荐