第十一章(线程)
1、通过String name=Thread.currentThread().getName();来获取当前线程的名称。
2、多次启动一个线程或者启动一个已经运行的线程是非法的,会抛出IllegalThreadStateException异常对象。
Thread.sleep((int)Math.random()*10000);
3、java提供了Runnable接口使继承了其他类之后同样可以实现该接口达到创建线程的目的Runabble接口同样定义了Run方法。
实现Runnable接口的对象需要传递给Thread类的构造方法通过Thread的构造方法去创建线程
package com.lenovo.dishiyizhang;
import java.awt.BorderLayout;
import java.awt.TextArea;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
public class RunnableDemo extends JFrame implements Runnable {
private JTextArea textArea;// 文本域组件
// 动画显示的文本字符串
private String introduction = "现在大家已经对计算机很熟悉了如今计算机的操作" +
"系统可以同时执行多个任务在听歌的同时能够打字、下载文件在聊天窗口打" +
"字的时候对方同时还能通过视频看到你听到你。这一切都是使用多任务实现" +
"的Java语言使用多线程实现一个程序中的多个任务同时运行。程序员可以在程" +
"序中执行多个线程每一个线程完成一个功能并与其他线程并发执行这种机" +
"制被称为多线程。";
public RunnableDemo() {
// TODO Auto-generated constructor stub
setTitle("多线程简介:");
setBounds(100, 100, 383, 225);
textArea = new JTextArea("\t");
textArea.setBorder(new BevelBorder(BevelBorder.LOWERED));
textArea.setLineWrap(true);
getContentPane().add(textArea, BorderLayout.CENTER);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
RunnableDemo runnableDemo =new RunnableDemo();
Thread thread = new Thread(runnableDemo);
thread.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i <=introduction.length()-1; i++) {
try {
introduction.charAt(i);
Thread.sleep(50);
textArea.append(String.valueOf(introduction.charAt(i)));
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
4、
car = new JLabel();
ImageIcon icon = new ImageIcon(getClass().getResource("icon.jpg"));
car.setIcon(icon);
car.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight());
setResizable(false);//禁止调整窗体大小
getContentPane().setLayout(null);
5、线程的调度,当某个线程使用Jion()方法加入到另外一个线程时另一个线程会等待该线程执行完毕再继续执行。
6、线程的优先级可以使用setPriority()方法调整若果使用该方法设置优先级不在1-10之内将产生一个IllegalArgumentException的异常。
7、java提供线程的同步机制可以防止资源访问的冲突。同步块(锁定对象)同步方法
8、Swing程序是使用单线程机制进行界面绘制处理的。如果再swing中执行耗时的业务逻辑例如将数据库查询、文件操作在swing线程中执行将会导致程序界面阻塞。
看API: setViewportView public void setViewportView(Component view)创建一个视口(如果有必要)并设置其视图。不直接为 JScrollPane 构造方法提供视图的应用程序应使用此方法指定将显示在滚动窗格中的滚动组件子级。例如: JScrollPane scrollpane = new JScrollPane(); scrollpane.setViewportView(myBigComponentToScroll); 应用程序不应将子级直接添加到滚动窗格
Vector有点类似List、ArrayList用来存储数据用的。 new Vector(1, 1)意思是建立一个Vector容量是1相当于int a[1]只是数据类型不一样。但是如果这个Vector(userOnline)存储满了那么它会自己自己存储长度每次增加1一个存储单位这就是 后面的那个1的含义
为解决在swing中使用单线程机制导致页面卡死的现象我们必须将费时的业务处理代码放在其他线程中执行,这样就不会阻塞SwingUI线程不会使界面死锁。invokeLater方法
本文出自 “autoComplete” 博客,转载请与作者联系!
原文地址:http://7129486.blog.51cto.com/7119486/1537194