As we all know,a thread is a separate process on your computer.you can run multiple threads all at the same time.

multi-threaded code has the disadvantage of becoming quite complex very quickly,although java has some great classes for dealing

with multithreading and simplifying it.

Today we will just look at creating threads,along with using anonymous classes to simplify(or some would say,complexify)your code.

there are two methods to Creating Threads in Java

the first way is to extend the Thread class, override the run() method with the code you want to execute,

then create a new object from your class and call start().

the second method is to pass an implementation of the Runnable interface to the constructor of Thread,

then call start().

we will look at both of the method in turn.

1.Extending the Thread Class

the sample code ad bellow:

public class Worker extends Thread {

	@Override
public void run() { // Loop for ten iterations. for(int i=0; i<10; i++) {
System.out.println(i + " looping ..."); // Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// Interrupted exception will occur if
// the Worker object's interrupt() method
// is called. interrupt() is inherited
// from the Thread class.
break;
}
}
} }

As shown above, we have create a Worker class that extends Thread. And override the run() Method and put some code

in it. The code just loops repeatedly and outputs a method.

we've also used a static method of the thread class,sleep().

note:if you use sleep,you should have to catch InterruptedException.

In the code below,we create two worker class and call their inherited start() methods, both run at the same time,not one after the other

public class Application {

	public static void main(String[] args) {
Worker worker1 = new Worker();
worker1.start(); Worker worker2 = new Worker();
worker2.start(); // You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
} }

screenshot as below:

0 looping ...
0 looping ...
1 looping ...
1 looping ...
2 looping ...
2 looping ...
3 looping ...
3 looping ...
4 looping ...
4 looping ...
5 looping ...
5 looping ...
6 looping ...
6 looping ...
7 looping ...
7 looping ...
8 looping ...
8 looping ...
9 looping ...
9 looping ...

the start() method, inherited from the parent Thread class, creates a new thread and runs whatever code is in run() in the new thread.

if not use the threads:

public class Application {

	public static void main(String[] args) {

		Worker worker1 = new Worker();
worker1.run(); Worker worker2 = new Worker();
worker2.run(); // You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
} }

result as below:

0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

above code doesn't use multithreading, take twice as long to run.

2.passing code to Thread Directly

the second method of starting a thread is to put the code you want to run in the run method of a class that implements the Runnable interface, then pass it to

the constructor of a thread class

the code below does exactly that;we've put the code all in one file to make it easier to follow.

class CodeRunner implements Runnable {

	@Override
public void run() {
// Loop for ten iterations. for(int i=0; i<10; i++) {
System.out.println(i + " looping ..."); // Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
break;
}
}
} } public class Application { public static void main(String[] args) { CodeRunner runner = new CodeRunner(); Thread thread = new Thread(runner);
thread.start();
} }

result:

0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

we can simplify this code by calling new directly on our coderunner class,right where we create the thread.

Thread thread = new Thread(new CodeRunner());
thread.start();

3.Quick and Dirty Thread using Anonymous Class

in fact we can make this code even terser by creating a new intance of Runnable,sortof,directly in the Thread constructor.

Actually,we can't create a new intance of Runnable because it's an interface; so we can't do the follow:

// Won't work
Thread thread = new Thread(new Runnable());
thread.start();

but we can get this to work if we add in some curly brackets and implement the missing run() method in them.

// This works
Thread thread = new Thread(new Runnable() { @Override
public void run() { } }); thread.start();

of course, to get this code to do anything, we have to add some actual code to run.

Thread thread = new Thread(new Runnable() {

	@Override
public void run() {
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
}
} }); thread.start();
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

finally,we can make the code ecen more terse, if a little more cryptic,by not bothering to declare a variable to hold the thread class, and then

just calling the stat() method on it directly.

new Thread(new Runnable() {

	@Override
public void run() {
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
}
} }).start();

here just to make the code a bit clearer.

if you are also interest in linux and android embed system,please connection with us in QQ group:139761394

Threads and Anonymous Classes in JAVA的更多相关文章

  1. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  2. JAVA匿名内部类(Anonymous Classes)

    1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...

  3. Unit Testing of Classes in Java

    Every class can have a main method. That is a handy trick for unit testing of classes. For example, ...

  4. Replacing the deprecated Java JPEG classes for Java 7

    [src: https://blog.idrsolutions.com/2012/05/replacing-the-deprecated-java-jpeg-classes-for-java-7/] ...

  5. Java基础之二十 并发

    20.1 并发得多面性 并发编程令人困惑的一个主要原因:使用并发时需要解决的问题有多个,而实现并发的方法也有多种,并且在这两者之间没有明显的映射关系. 20.1.1 更快的执行 速度问题初听起来很简单 ...

  6. java--线程认识与实例记录 NO.1

    下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用. 主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法. 1.首先 ...

  7. 【Try Kotlin】Kotlin Koans 代码笔记

    Kotlin Koans 心印 Introduction 1.Hello, world! Simple Functions Take a look at function syntax and mak ...

  8. Java8_02_lambda表达式

    一.前言 这一节我们来了解下lambda表达式,主要关注以下几点: 行为参数化 匿名类 Lambda 表达式 方法 引用 二.行为参数化 1.概念 行为参数化(behavior parameteriz ...

  9. Java Inner Classes

    When thinking about inner classes in java, the first thing that comes to my mind is that, WHY do we ...

随机推荐

  1. Linux学习之chage命令

    功能:修改帐号和密码的有效期限用法:chage[-l][-m mindays][-M maxdays][-I inactive][-E expiredate][-W warndays][-d last ...

  2. mybaitis配置信息

    在配置mybatis当中,jdbcType的名称要大写,时间类型DATE只能传入年月日,要想传入时分秒,应该使用TIMESTAMP http://www.blogjava.net/hello-yun/ ...

  3. R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN

    基于密度的方法:DBSCAN 基于密度的方法:DBSCAN DBSCAN=Density-Based Spatial Clustering of Applications with Noise 本算法 ...

  4. 根据不同需求跳转不同Activity的另外一种写法

    代码如下: /* Android Asynchronous Http Client Sample Copyright (c) 2014 Marek Sebera <marek.sebera@gm ...

  5. codeforces 650D. Zip-line 线段树

    题目链接 题目的意思很简单, 就是给你n个数, m个询问, 每次询问修改某一个位置的值, 然后问你修改完之后数列的lis是多少. 询问独立. 对于原数列, 我们将它离散化, 令dp1[i]为以i为结尾 ...

  6. poj 3469 Dual Core CPU 最小割

    题目链接 好裸的题....... 两个cpu分别作为源点和汇点, 每个cpu向元件连边, 权值为题目所给的两个值, 如果两个元件之间有关系, 就在这两个元件之间连边, 权值为消耗,这里的边应该是双向边 ...

  7. MySQL 表分区A

    在MySQL中表的分区类型总的来说有四种: 第一种:range分区.基于一个给定的区间范围,把数据分配到不同的分区. 第二种:list   分区.基本枚举的值列表进行分区. 第三种:hast 分区.基 ...

  8. 《转》使用JAVA如何对图片进行格式检查以及安全检查处理

    本文出自冯立彬的博客,原地址:http://www.fenglibin.com/use_java_to_check_images_type_and_security.html 一.通常情况下,验证一个 ...

  9. WM_SYSCOMMAND包括很多功能,比如:拖动左边框、拖动标题栏、滚动条滚动、点击最小化、双击标题栏——Delphi 通过事件代替了大部分常用的消息,所以Delphi 简单、易用、高效

    procedure TForm1.WMSysCommand(var Message: TWMSysCommand); var str: string; begin case Message.CmdTy ...

  10. 解决Windows 程序界面闪烁问题的一些经验

    原帖地址:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化 ...