问题描述
publicclassNewsThreadimplementsRunnable{privateNewsServicensi=newNewsServiceImpl();privateList<news>newslist=newArrayList<news>();privateStringname;@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubnewslist=nsi.select(0);//一个获取数据的操作}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubNewsThreadtest=newNewsThread();Threadts1=newThread(test);ts1.start();List<news>news1=newArrayList<news>();news1=test.getNewslist();for(inti=0;i<news1.size();i++){newsnews=news1.get(i);System.out.println(news.getNews_id());}}//省略get。set方法}代码如上我用Runnable的run()方法做一个数据库的访问操作(为什么要这样做事因为多个用户同时方法数据库时候会出现只有一个用户能访问的情况,所以想到多线程解决。。。。。)但是启动线程后无法在mina方法中获取newslist的值。。这是什么个情况!!!!!!!!!!
解决方案
解决方案二:
你的main函数访问的时候你的线程才刚开始运行,访问数据库的过程还没完成,所以newslist的值还没有更新。你需要加同步机制,确保newslist的值更新完毕。
解决方案三:
joinjoin
解决方案四:
引用楼主baidu_17402355的回复:
publicclassNewsThreadimplementsRunnable{privateNewsServicensi=newNewsServiceImpl();privateList<news>newslist=newArrayList<news>();privateStringname;@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubnewslist=nsi.select(0);//一个获取数据的操作}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubNewsThreadtest=newNewsThread();Threadts1=newThread(test);ts1.start();List<news>news1=newArrayList<news>();news1=test.getNewslist();for(inti=0;i<news1.size();i++){newsnews=news1.get(i);System.out.println(news.getNews_id());}}//省略get。set方法}代码如上我用Runnable的run()方法做一个数据库的访问操作(为什么要这样做事因为多个用户同时方法数据库时候会出现只有一个用户能访问的情况,所以想到多线程解决。。。。。)但是启动线程后无法在mina方法中获取newslist的值。。这是什么个情况!!!!!!!!!!
能说的具体点么。最好能有代码示例~
解决方案五:
引用1楼loneking2001的回复:
你的main函数访问的时候你的线程才刚开始运行,访问数据库的过程还没完成,所以newslist的值还没有更新。你需要加同步机制,确保newslist的值更新完毕。
能说的具体点么。最好能有代码示例~
解决方案六:
你主线程启动子线程后就直接访问newslist了,这个时候子线程可能还没有获取到数据,你主线程获取newslist.size就等于0了。表现出来的结果自然是main方法中访问不到数据。你要确保子线程已经获取到数据之后,主线程才能去访问newslist。
解决方案七:
2#正解,ts1.join等着线程运行结束