关于多线程Runnable的问题~

问题描述

publicclassNewsThreadimplementsRunnable{​privateNewsServicensi=newNewsServiceImpl();​privateList<news>newslist=newArrayList<news>();​privateStringname;​@Override​publicvoidrun(){​//TODOAuto-generatedmethodstub​newslist=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;​@Override​publicvoidrun(){​//TODOAuto-generatedmethodstub​newslist=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等着线程运行结束

时间: 2024-12-23 21:27:14

关于多线程Runnable的问题~的相关文章

多线程Runnable和Thread产生线程

  http://dev.yesky.com/186/2547686.shtml public class Test { public static void main(String[] args) throws Exception{ MyThread mt = new MyThread(); mt.start(); mt.join(); Thread.sleep(3000); mt.start(); } } 当线程对象mt运行完成后,我们让主线程休息一下,然后我们再次在这个线程对象上启动线程.

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法_java

实现方式和继承方式有什么区别呢? *区别: *继承Thread:线程代码存放在Thread子类run方法中 *实现Runnable:线程代码存放在接口的子类的run方法中 *实现方式的好处:避免了单继承的局限性 *在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程 *注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws *Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchroniz

Java多线程--认识多线程(Thread、Runnable)

1.进程与线程 dos系统:单进程.只能有一个程序独自运行,其他程序无法运行. windows系统:多进程.同一时间段上有多个程序同时运行. 2.java的多线程实现 在java中实现多线程可以采用两种方式: 继承Thread类. 实现Runnable接口. 3.Thread类 java.lang包会在程序运行时自动导入,所以不用编写import语句. class MyThread extends Thread{ // 继承Thread类,作为线程的实现类 private String name

java 中 ScheduledExecutorService 创建的多线程和 runnable

问题描述 java 中 ScheduledExecutorService 创建的多线程和 runnable 今天用到用ScheduledExecutorService 做定时任务,发现里面可以做多线程的操作.使用起来也很方便. 直接new 个实例就可以了. ScheduledExecutorService executor = Executors .newScheduledThreadPool(10); for (int i = 0; i < 10; i++) { executor.schedu

swt 界面假死 使用asyncExec(runnable),没出现多线程的效果

问题描述 我现在做网络抓取数据包后再还原成html的一个实验,使用swt实现界面,点击开始按钮开始抓包,点击停止按钮停止抓包,想法是抓取到一个数据包就在表格显示,也就是动态刷新界面,当抓取的数据包上千上万的时候界面就假死了,要停止抓包根本停止不了,有时候只有点击鼠标界面就出现无法响应的情况.整个界面代码如下,现在做一个小实验,点击开始按钮,表格创建1000行,第一列为名称,第二列为进度条.但是我想在1000行生成之前停止,但是1000行没生成完之前stop根本不好使,在1000行生成完之后点st

Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:多线程(理解) (1)多线程:一个应用程序有多条执行路径 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 多进程的意义? 提高

java:多线程基础之Runnable、Callable与Thread

java.lang包下有二个非常有用的东西:Runnable接口与Thread类,Thread实现了Runnable接口(可以认为Thread是Runnable的子类),利用它们可以实现最基本的多线程开发. 一.Runnable入门示例 1 public class RunnableDemo1 { 2 3 public static void main(String[] args) { 4 new Runnable() { 5 public void run() { 6 for (int i =

Java——Thread/Runnable实现多线程

 一,关于线程的基本概念                          一个独立程序的每一次运行成为一个进程.               每个进程又可以包含多个同时执行的子任务,对应多个线程.               将一个进程分解为互不影响的多个线程,可以使多个线程并行执行,大大缩短了执行时间. 二,通过继承Thread类实现新线程   public class FactorialThreadTester { /** * 主线程 */ public static void main(

JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口

JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一.Thread 如何在自定义的代码中,自定义一个线程呢? 我们查看API文档,我们要启动一个线程,先实现一个子类, package com.lgl.hellojava; public class MyThread extends Thread { @Override public void run()