Android(13)java中的线程回顾,Android线程,主线程(UI线程)
2015-11-22 17:01
531 查看
java 中的线程
//不常用,不建议方式
使用实现Runnable方法好处有两条:
:如果你的MyThread类已经继承了一个类,那么java中不允许多继承,这样让你的MyThread实现一个Runnable接口正好啊。
:如果同一个对象创建多线程那么共享一个数据成员index
例子:不要在非UI线程(主线程中)修改UI
报错:
![](https://img-blog.csdn.net/20151122162326123)
代码:
可以在工作线程中修改UI的控件:ProgressBar
在应用程序中,主线程用于接收用户输入,以及将运算的结果反馈给用户。所以说对于一些可能造成阻塞的操作,必须放在WorkThread.
class ThreadImp implements Runnable { public void run() { for(int i = 0;i<100 ; i++){ System.out.println("Runnable -> " + i); } } } class test { public static void main(String[] args){ //生成一个runnable 接口实现类的对象 //生成一个Thread类的对象并将Runnable接口实现类的对象作为参数传递给该Thread对象。 //通知Trhead对象执行start(); ThreadImp ti = new ThreadImp(); Thread t = new Thread(ti); t.start(); } }
//不常用,不建议方式
class FirstThread extends Thread { public void run() { for(int i = 0; i < 100;i++){ System.out.println("FirstThread" + i); } } } class test { public static void main(String args[]){ //创建线程 FirstThread ft = new FirstThread(); //start后进入到等待状态 ft.start();//千万不能这样写ft.run();这样是一个线程一个线程执行的,先是FirstThread从0-99然后main线程0-99 for(int i = 0;i<100;i++) { System.out.println("main" + i); } } }
使用实现Runnable方法好处有两条:
:如果你的MyThread类已经继承了一个类,那么java中不允许多继承,这样让你的MyThread实现一个Runnable接口正好啊。
:如果同一个对象创建多线程那么共享一个数据成员index
例子:不要在非UI线程(主线程中)修改UI
报错:
代码:
public class MainActivity extends Activity { private Button mButton; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mButton = (Button)findViewById(R.id.get_btn); mTextView = (TextView)findViewById(R.id.show_tv); ButtonChangedListener listener = new ButtonChangedListener(); mButton.setOnClickListener(listener); } //创建一个WorkThread class MyThread extends Thread{ public void run(){ mTextView.setText("修改TextView内容"); try{ }catch(Exception e){ e.printStackTrace(); } } } class ButtonChangedListener implements OnClickListener{ @Override public void onClick(View arg0) { MyThread thread = new MyThread(); thread.start(); } } }
可以在工作线程中修改UI的控件:ProgressBar
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/get_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="得到"/> <ProgressBar android:id="@+id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"/> </LinearLayout>
public class MainActivity extends Activity { private Button mButton; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mButton = (Button) findViewById(R.id.get_btn); mProgressBar = (ProgressBar) findViewById(R.id.progressBar); ButtonChangedListener listener = new ButtonChangedListener(); mButton.setOnClickListener(listener); } // 创建一个WorkThread class MyThread extends Thread { public void run() { for (int i = 0; i < 100; i++) { mProgressBar.setProgress(mProgressBar.getProgress() + 1); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class ButtonChangedListener implements OnClickListener { @Override public void onClick(View arg0) { MyThread thread = new MyThread(); thread.start(); } } }
在应用程序中,主线程用于接收用户输入,以及将运算的结果反馈给用户。所以说对于一些可能造成阻塞的操作,必须放在WorkThread.
相关文章推荐
- POJ1679The Unique MST(次小生成树)
- 第九章 UI布局管理器
- break continue详解
- 第八章 高级UI组件
- easyui环境搭建02
- Unique Paths II-leetcode
- cocoapods 0.35.0 版本 报错 Parsing unable to continue due to parsing error:
- UIBezierPath的自定义路径绘图
- LeetCode 062 Unique Paths
- CALayer 为什么选择 cg 开头 而 不选择 UI 开头
- Hbuilder--让手爽,飞一般的编码(二)
- ios UIButton的创建和使用入门
- UILabel
- HDU5538 House Building(简单计算)
- [leetcode-307]Range Sum Query - Mutable(java)
- SqlConnectionStringBuilder基础
- Druid:一个用于大数据实时处理的开源分布式系统
- LeetCode OJ:N-Queens(N皇后问题)
- UIImage与UIImageView属性总结以及手势识别器
- ContentProvider android:exported = “true”