
正文
java的run代码 java runoob
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java run()中的代码是不是按顺序的
是的。
public void run() {
这里面的代码是一行一行执行的。
如果代码里面没有循环的过程,则代码一行一行执行完后,线程相当于退出了。
如果代码里面有循环的过程,则线程就会在 run 里面一直运行,直到循环结束的时候,线程才相当于退出。
}
相关问答
Q1: java中thread的start()和run()有何区别?
1、start()方法来启动线程,真正实现了多线程运行,这时无需等待。
run方法体代码执行完毕而直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
通过Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。
2、run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码;
而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
3、调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
4、这两个方法需要把并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
扩展资料:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
参考资料来源:百度百科-java基础
Q2: Java代码运行器
import java awt BorderLayout;
import java awt Color;
import java awt EventQueue;
import java awt event ActionEvent;
import java awt event ActionListener;
import java io BufferedReader;
import java io BufferedWriter;
import java io File;
import java io FileInputStream;
import java io FileOutputStream;
import java io InputStreamReader;
import java io OutputStreamWriter;
import javax swing JButton;
import javax swing JColorChooser;
import javax swing JFileChooser;
import javax swing JFrame;
import javax swing JLabel;
import javax swing JMenu;
import javax swing JMenuBar;
import javax swing JMenuItem;
import javax swing JOptionPane;
import javax swing JPanel;
import javax swing JScrollPane;
import javax swing JTextArea;
import javax swing JTextField;
import javax swing JTextPane;
import javax swing SwingUtilities;
import javax swing UIManager;
import javax swing border EtchedBorder;
import javax swing text BadLocationException;
import javax swing text Document;
import javax swing text SimpleAttributeSet;
import javax swing text StyleConstants;
import javax swing text StyledEditorKit;
public class RunJava extends JFrame {
private JTextField textField_ ;
private JTextField textField;
private String url = System getProperty( user dir ) + \\ ;
private JTextPane textArea_ ;
private JTextArea textArea;
private static String cmd = first ;
private static Process pro = null;
private Thread InPutThread = null;
private Thread OutPutThread = null;
private Thread ErrorThread = null;
private JMenu File Edit;
private JMenuBar Part;
private JMenuItem Open InsertMain SaveAs Save Exit MarkColor;
private File file;
private String [] Keyword = { abstract default if private this boolean do implements protected throw break double import public throws byte else instanceof return transient case extends int short try catch final interface static void char finally long strictfp volatile class float native super while const for new switch continue goto package synchronized };
public static void main(String args[]) {
EventQueue invokeLater(new Runnable() {
public void run() {
try {
RunJava frame = new RunJava();
frame setVisible(true);
} catch (Exception e) {
e printStackTrace();
}
}
});
}
public RunJava() throws Exception {
super( Java代码运行器 );
File = new JMenu( 文件 );
Part = new JMenuBar();
Edit = new JMenu( 编辑 );
Part add(File);
Part add(Edit);
Open = new JMenuItem( 打开 );
Open addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器
fileChooser setFileSelectionMode(JFileChooser FILES_AND_DIRECTORIES); // 设置文件选择模式 此处为文件和目录均可
if (fileChooser showOpenDialog(RunJava this) == JFileChooser APPROVE_OPTION) { // 弹出文件选择器 并判断是否点击了打开按钮
String fileName = fileChooser getSelectedFile() getAbsolutePath(); // 得到选择文件或目录的绝对路径
System out println(fileName);
file = new File(fileName);
InputData();
}
}
});
Save = new JMenuItem( 保存 );
Save addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
if(file==null){
JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器
fileChooser setFileSelectionMode(JFileChooser FILES_AND_DIRECTORIES); // 设置文件选择模式 此处为文件和目录均可
if (fileChooser showSaveDialog(RunJava this) == JFileChooser APPROVE_OPTION) { // 弹出文件选择器 并判断是否点击了打开按钮
String fileName = fileChooser getSelectedFile() getAbsolutePath(); // 得到选择文件或目录的绝对路径
System out println(fileName);
file = new File(fileName);
OutputData();
}
}else{
OutputData();
}
}
});
SaveAs = new JMenuItem( 另存为 );
SaveAs addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器
fileChooser setFileSelectionMode(JFileChooser FILES_AND_DIRECTORIES); // 设置文件选择模式 此处为文件和目录均可
if (fileChooser showSaveDialog(RunJava this) == JFileChooser APPROVE_OPTION) { // 弹出文件选择器 并判断是否点击了打开按钮
String fileName = fileChooser getSelectedFile() getAbsolutePath(); // 得到选择文件或目录的绝对路径
file = new File(fileName);
OutputData();
}
}
});
Exit = new JMenuItem( 退出 );
Exit addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
int j=JOptionPane showConfirmDialog(RunJava this 真的要退出吗? 退出 JOptionPane YES_OPTION JOptionPane QUESTION_MESSAGE);
if (j == JOptionPane YES_OPTION){
System exit( );
}
}
});
File add(Open);
File add(Save);
File add(SaveAs);
File add(Exit);
InsertMain = new JMenuItem( 新建 );
InsertMain addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
String str = public class test {\n
+ public static void main(String[] args) {\n
+ System out println(\ hello java\ );\n
+ }\n + } ;
textArea_ setText(str);
textField setText(getName(textArea_ getText()));
}
});
MarkColor = new JMenuItem( 标注颜色 );
MarkColor addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
String str = public class test {\n
+ public static void main(String[] args) {\n
+ System out println(\ hello java\ );\n
+ }\n + } ;
int a = str indexOf( class );
// System out println(a);
setDocs(str substring(a a+ ) Color RED true );
}
});
Edit add(InsertMain);
Edit add(MarkColor);
setJMenuBar(Part);
getContentPane() setLayout(null);
setBounds( );
setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
panel setLayout(new BorderLayout());
panel setBounds( );
getContentPane() add(panel);
textArea_ = new JTextPane();
panel add(new JScrollPane(textArea_ ) BorderLayout CENTER);
final JPanel panel_ = new JPanel();
panel_ setLayout(new BorderLayout());
panel_ setBorder(new EtchedBorder(EtchedBorder LOWERED));
panel_ setForeground(Color BLUE);
panel_ setBounds( );
getContentPane() add(panel_ );
textArea = new JTextArea();
panel_ add(new JScrollPane(textArea) BorderLayout CENTER);
try {
UIManager setLookAndFeel( sun java swing plaf nimbus NimbusLookAndFeel );
} catch (Exception ex ) {
try {
UIManager setLookAndFeel( sun java swing plaf windows WindowsClassicLookAndFeel );
} catch (Exception ex ) {
UIManager setLookAndFeel( sun java swing plaf windows WindowsLookAndFeel );
}
}
SwingUtilities updateComponentTreeUI(this);
textField = new JTextField();
textField setToolTipText( 不填自动从Java代码中提取类名 );
textField setBounds( );
getContentPane() add(textField);
final JLabel label = new JLabel();
label setText( 类名: );
label setBounds( );
getContentPane() add(label);
setResizable(false);// 屏蔽最大化按钮
textField_ = new JTextField();
textField_ setBounds( );
textField_ setToolTipText( 可以和Java交互信息 );
getContentPane() add(textField_ );
final JButton button_ = new JButton();
button_ addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
cmd = textField_ getText();
}
});
button_ setText( CMD命令发送 );
button_ setBounds( );
getContentPane() add(button_ );
final JButton button_ = new JButton();
button_ addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg ) {
String name = textField getText();
if (name trim() length() == ) {
textField setText(getName(textArea_ getText()));
}
FileOut(textField getText() + java textArea_ getText());
File file = new File(url + textField getText() + class );
if (file exists()) {
file delete();
}
String exe = cmd ;
try {
pro = Runtime getRuntime() exec(exe);
if (InPutThread != null)InPutThread stop();
if (OutPutThread != null)InPutThread stop();
if (ErrorThread != null)InPutThread stop();
InPutThread = new Thread(new RunTimeInput());
OutPutThread = new Thread(new RunTimeOutput(new InputStreamReader(pro getInputStream())));
ErrorThread = new Thread(new RunTimeOutput(new InputStreamReader(pro getErrorStream())));
InPutThread start();
OutPutThread start();
ErrorThread start();
exec( javac + textField getText() + java );
Thread sleep( );
exec( java + textField getText() + );
} catch (Exception e) {
e printStackTrace();
}
}
});
button_ setText( 编译/运行 );
button_ setBounds( );
getContentPane() add(button_ );
}
public void FileOut(String name String Content) {
File file = new File(url + name);
if (file exists())
file delete();
try {
file createNewFile();
FileOutputStream out = new FileOutputStream(file);
byte buf[] = Content getBytes();
out write(buf);
out flush();
out close();
} catch (Exception ex) {
ex printStackTrace();
}
}
public class RunTimeInput implements Runnable {
private BufferedWriter bw = null;
public void run() {
bw = new BufferedWriter(new OutputStreamWriter(pro getOutputStream()));
while (true) {
try {
if (cmd != null cmd length() ) {
bw write(cmd + \n\n );
bw flush();
cmd = null;
}
Thread sleep( );
} catch (Exception e) {
e printStackTrace();
}
}
}
}
public class RunTimeOutput implements Runnable {
InputStreamReader isr = null;
public RunTimeOutput(InputStreamReader is) {
isr = is;
}
private BufferedReader br = null;
public void run() {
br = new BufferedReader(isr);
while (true) {
try {
String s = br readLine();
if (s != null) {
textArea setText(textArea getText() + \n + s);
textArea setSelectionStart(textArea getText() length());
}
Thread sleep( );
} catch (Exception e) {
e printStackTrace();
}
}
}
}
public void exec(String Content) {
cmd = Content;
}
public String getName(String str) {
String name = ;
if (str indexOf( class ) != ) {
String[] s = str split( \\s+ );
for (int i = ; i s length; i++) {
if (s[i] equals( class )) {
if ((i + ) s length)
name = s[i + ];
int a = ;
if((a=name indexOf( { ))!= ){
name= name substring( a);
}
}
}
}
return name;
}
public void OutputData() {
try {
FileOutputStream out = new FileOutputStream(file);
byte buf[] = textArea_ getText() getBytes();
out write(buf);
out flush();
out close();
} catch (Exception e) {
e printStackTrace();
}
}
public void InputData() {
try {
FileInputStream in = new FileInputStream(file);
int a = (int)file length();
byte buf[] = new byte[a];
int len = in read(buf);
if (len == ){
System out println( 文件为空 );
}else{
textArea_ setText(new String(buf len));
}
} catch (Exception e) {
e printStackTrace();
}
}
/**
* @param str 内容
* @param col 颜色
* @param bold 是否粗体
* @param fontSize 字体大小
*/
public void setDocs(String str Color col boolean bold int fontSize) {
SimpleAttributeSet attrSet = new SimpleAttributeSet();
StyleConstants setForeground(attrSet col);
// 颜色
if (bold == true) {
StyleConstants setBold(attrSet true);
}// 字体类型
StyleConstants setFontSize(attrSet fontSize);
// 字体大小
Document doc = textArea_ getDocument();
try {
doc insertString(doc getLength() str attrSet);
} catch (BadLocationException e) {
System out println( BadLocationException: + e);
}
}
}
lishixinzhi/Article/program/Java/hx/201311/26653
Q3: java多线程问题 跳过run方法里面的if执行?
多线程
35. 并行和并发有什么区别?
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
36. 线程和进程的区别?
简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。
37. 守护线程是什么?
守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。
38. 创建线程有哪几种方式?
①. 继承Thread类创建线程类
定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run方法称为执行体。
创建Thread子类的实例,即创建了线程对象。
调用线程对象的start方法来启动该线程。
②. 通过Runnable接口创建线程类
定义runnable接口的实现类,并重写该接口的run方法,该run方法的方法体同样是该线程的线程执行体。
创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
调用线程对象的start方法来启动该线程。
③. 通过Callable和Future创建线程
创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值。
创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call方法的返回值。
使用FutureTask对象作为Thread对象的target创建并启动新线程。
调用FutureTask对象的get方法来获得子线程执行结束后的返回值。
39. 说一下 runnable 和 callable 有什么区别?
有点深的问题了,也看出一个Java程序员学习知识的广度。
Runnable接口中的run方法的返回值是void,它做的事情只是纯粹地去执行run方法中的代码而已;
Callable接口中的call方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。
40. 线程有哪些状态?
线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。
死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪
41. sleep 和 wait 有什么区别?
sleep:方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。
wait:wait是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程
42. notify和 notifyAll有什么区别?
如果线程调用了对象的 wait方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。
当有线程调用了对象的 notifyAll方法(唤醒所有 wait 线程)或 notify方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争。
优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。
43. 线程的 run和 start有什么区别?
每个线程都是通过某个特定Thread对象所对应的方法run来完成其操作的,方法run称为线程体。通过调用Thread类的start方法来启动一个线程。
start方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run来完成其运行状态, 这里方法run称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。
run方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run,其实就相当于是调用了一个普通函数而已,直接待用run方法必须等待run方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start方法而不是run方法。
44. 创建线程池有哪几种方式?
①. newFixedThreadPool(int nThreads)
创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。
②. newCachedThreadPool
创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在任何限制。
③. newSingleThreadExecutor
这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行。
④. newScheduledThreadPool(int corePoolSize)
创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。
45. 线程池都有哪些状态?
线程池有5种状态:Running、ShutDown、Stop、Tidying、Terminated
关于java的run代码和java runoob的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






