Java中的多线程处理-学习笔记
来源:互联网 发布:js获取整数的最大数值 编辑:程序博客网 时间:2024/06/14 00:00
在Java中实现多线程处理的方法有两种
第一种:继承Thread类,将需要完成的操作放在类的run()方法中,调用Thread中的start()方法就能启动线程
public class MyThread extends Thread {private int count = 10;public void run() {while(true) {System.out.println(count);if (--count == 0) {return;}}}public static void main(String[] args) {new MyThread().start();}}
第二种:前一种方法需要继承Thread类来完成,但是当实现的类已经继承其他类时,就不能使用这种方法了,因为java中只允许一次继承,这时就需要用到第二种方法Runnable接口实现
Thread类有两个构造方法
public Thread(Runnable r)
public Thread(Runnable r, String name)
可以看到这两个构造方法接收Runnable对象,只需要对Thread传入实现了Runnable接口的对象,再调用start()即可
import java.awt.Color;import java.awt.Graphics;import java.util.Random;import javax.swing.JFrame;public class SleepMethodTest extends JFrame{private Thread t;private static Color[] color = {Color.BLACK, Color.BLUE, Color.CYAN, Color.green, Color.orange, Color.yellow, Color.red,Color.pink, Color.LIGHT_GRAY};private static final Random rand = new Random();private static Color getC() {return color[rand.nextInt(color.length)];}public SleepMethodTest(){t = new Thread(new Runnable() {int x = 30;int y = 50;@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {try {Thread.sleep(23);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}Graphics graphics = getGraphics();graphics.setColor(getC());graphics.drawLine(x, y, 500, y++);graphics.drawLine(x, y, x++, 500);if (y >= 400) {y = 50;}if ( x >= 400) {x = 50;}}}});t.start();}public static void main(String[] args) {init(new SleepMethodTest(), 520, 500);}public static void init(JFrame frame, int width, int heigth) {frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(width, heigth);frame.setVisible(true);}}
————————————————————————————————————————————————————————————————————
多线程的操作存在线程安全问题,本质上是多线程对同一个对象的读写造成的,为了避免这个问题,主要的解决方法就是同一时间只允许一个线程访问共享资源
在java中由同步块来实现,在run()方法中,把对共享数据的代码操作放在同步块中即可,当然同步块同的代码必须尽量简短,否则会影响效率
synchronized(Object){}还有另一种方式,就是使用同步方法,对run()中的方法修饰synchronized关键字,这样该对象上的其他同步方法都必须等待当前的同步方法执行完毕后才能执行。
synchronized void f(){}
0 0
- Java中的多线程处理-学习笔记
- java多线程中的异常处理
- java多线程中的异常处理
- java多线程中的异常处理
- java 多线程中的异常处理
- java多线程中的异常处理
- Java多线程学习笔记
- Java多线程学习笔记
- Java学习笔记---多线程
- java多线程学习笔记
- Java多线程学习笔记
- Java多线程学习笔记
- JAVA多线程学习笔记
- Java 多线程学习笔记
- java多线程学习笔记
- Java多线程学习笔记
- [学习笔记]Java多线程
- java多线程学习笔记
- Java concurrency – CountDownLatch Example
- oracle性能小测试
- Unexpected error occured: org.apache.activemq.broker.BrokerStoppedException
- 11.2.3节练习
- Java 写文件:FileOutputStream
- Java中的多线程处理-学习笔记
- 百度地图(一)—————让百度地图显示在自己的软件上
- linux中usb设备的probe注册全过程
- poj1101
- 测试类型介绍
- RT5350SDK与openwrt的区别及基于openwrt定制USB摄像机软件(1)
- html5中viewport浅析
- JSON对象遍历和处理
- zigbee cc2530环境搭建及程序开发大概流程